我在DataGrid中有DatePicker:

<DataGridTemplateColumn Header="Next Date" Width="100" >
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <DatePicker SelectedDate="{Binding NextDate, Mode=TwoWay, Converter={StaticResource dateConverter}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <DatePicker Text="{Binding NextDate, Mode=TwoWay, Converter={StaticResource dateConverter}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>


它绑定到定义属性NextDate的对象(NextDate很长,我使用转换器在long和DateTime之间移动):

public long NextDate
{
    get { return _nextDate; }
    set
    {
        if (_nextDate != value)
        {
            _nextDate = value;
            NotifyPropertyChanged("NextDate");
        }
    }
}


问题是,当我通过键入或通过在下拉日历中进行选择来更改网格中的日期时,NextDate属性不会更改。
有任何想法吗?

最佳答案

尝试在绑定中设置UpdateSourceTrigger。以下对我来说很好


PropertyChanged表示SelectedDate
LostFocus表示Text


另外,尝试在调试器中的转换器中设置断点,以确保它被命中

Xaml

<DataGridTemplateColumn Header="Next Date" Width="100" >
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <DatePicker SelectedDate="{Binding NextDate,
                                       Mode=TwoWay,
                                       UpdateSourceTrigger=PropertyChanged,
                                       Converter={StaticResource dateConverter}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <DatePicker Text="{Binding NextDate,
                                       Mode=TwoWay,
                                       UpdateSourceTrigger=LostFocus,
                                       Converter={StaticResource dateConverter}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

09-30 16:33