WPF DatePicker не обновляет источник данных

У меня есть сетка данных WPF (на самом деле я использую Xceed DataGrid, но я думаю, что привязка работает так же). У меня есть столбец DatePicker в моей сетке, но когда я выбираю дату, он не обновляет базовый источник данных. Есть идеи?

Я уже пробовал:

{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}
{Binding Path=., Mode=TwoWay}
{Binding Path=., UpdateSourceTrigger=PropertyChanged}
{Binding Path=.}
{Binding .}
{Binding}

XAML:

<xcdg:Column FieldName="NeedDateOverride" Title="NEED DATE (OVERRIDE)" Width="100">
    <xcdg:Column.CellContentTemplate>
        <DataTemplate x:Name="needDateOverrideTemplate">
            <DockPanel HorizontalAlignment="Stretch" LastChildFill="True">
                <DatePicker SelectedDate="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedDateChanged="NeedDateOverride_SelectedDateChanged" PreviewMouseDown="NeedDateOverride_GotFocus" CalendarOpened="NeedDateOverride_CalendarOpened"></DatePicker>
            </DockPanel>
        </DataTemplate>
    </xcdg:Column.CellContentTemplate>
</xcdg:Column>

C#:

public DateTime NeedDateOverride
{
    get
    {
        return this.needDateOverrideValue;
    }

    set
    {
        if (value != this.needDateOverrideValue)
        {
            this.needDateOverrideValue = value;
            NotifyPropertyChanged();
        }
    }
}

person Christian Boyer    schedule 11.01.2019    source источник
comment
Попробуйте указать относительный источник. Когда я сталкиваюсь с подобными проблемами, я пробую относительный источник, и он работает. {Binding Path=.,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourAncestor}}} Извините, если синтаксис неверен, я печатаю его. Также не уверен насчет вашего PropertyChanged. Обычно я использую реализацию PropertyChanged, которая принимает такое имя, как NotifyPropertyChanged(needDateOverrideValue);   -  person nikhil    schedule 12.01.2019
comment
DataContext вашей ячейки соответствует объекту этой строки. Итак, {Binding NeedDateOverride, ...} должно работать, поправьте меня, если я ошибаюсь, и добавьте дополнительную информацию: каков источник вашего DataGrid / где определено NeedDateOverride / и т. д.   -  person nosale    schedule 12.01.2019


Ответы (1)


Поместите DatePicker в EditTemplate из CellEditor. См. документация для примера. CellContentTemplate используется для изменения внешнего вида ячейки, когда она не находится в режиме редактирования.

Если вы используете встроенный DataGrid, вам следует использовать CellEditingTemplate, а не CellTemplate.

person mm8    schedule 14.01.2019
comment
Это казалось довольно многообещающим, но мой источник данных по-прежнему не обновляется при изменении выбранной даты. На самом деле, как только я отключаю DatePicker и он теряет фокус, он возвращается к дате, которая ранее была в моем источнике данных. - person Christian Boyer; 15.01.2019
comment
@ChristianBoyer: Что, если вы привяжете свойство SelectedDate к {xcdg:CellEditorBinding}? - person mm8; 15.01.2019
comment
Хорошо, теперь DatePicker сохраняет свое значение, когда теряет фокус, но мой источник данных все еще не обновляется. - person Christian Boyer; 16.01.2019