C# WPF DataGrid:LostKeyboardFocus与iEdit和AddRows

C# WPF DataGrid:LostKeyboardFocus与iEdit和AddRows,c#,wpf,xaml,datagrid,lost-focus,C#,Wpf,Xaml,Datagrid,Lost Focus,我有一个WPFDataGrid和一个DataGridTextColumn。 它允许用户输入可变数量的日期(出于绑定目的,日期本身包装在一个类中) 但是(使用UpdateSourceTrigger=Default)当用户使用Tab键从DataGrid导航时,他正在编辑的单元格似乎没有离开编辑模式。 输入的值以红色显示,行标题显示一个感叹号,该感叹号用虚线框起来 将UpdateSourceTrigger设置为LostFocus可以解决这一问题,但当我的代码将基础集合(以便于连续用户输入)重置为单个项

我有一个WPF
DataGrid
和一个
DataGridTextColumn
。 它允许用户输入可变数量的日期(出于绑定目的,日期本身包装在一个类中)

但是(使用
UpdateSourceTrigger=Default
)当用户使用Tab键从
DataGrid
导航时,他正在编辑的单元格似乎没有离开编辑模式。 输入的值以红色显示,行标题显示一个感叹号,该感叹号用虚线框起来

UpdateSourceTrigger
设置为
LostFocus
可以解决这一问题,但当我的代码将基础集合(以便于连续用户输入)重置为单个项目集合时,
DataGrid
仅显示一行。尽管
CanUserAddRows=“True”
新的空行丢失了(如果我的代码只是通过清除集合来重置集合,则只显示列标题)

我试图通过将
模式
设置为
OneWayToSource
,来解决这个问题,但是
数据网格
不再显示输入的值

如果我将
UpdateSourceTrigger
设置为
PropertyChanged
验证很快就会发生,导致用户体验不好(日期应设置为DD/MM/YYYY。但是,一旦用户输入“1/1”,就会显示“01/01/2016”。使用退格编辑年份,会导致值更改为“01/01/0201”,等等)

似乎有一种解决方案()需要代码隐藏,但我更喜欢更干净的解决方案

我的代码:

<DataGrid AutoGenerateColumns="False"CanUserAddRows="True" ItemsSource="{Binding CourseDatesParameterForRequest}">
<DataGrid.Columns>
    <DataGridTextColumn Header="Datum" Binding="{Binding Date, ConverterCulture=nl-BE, Mode=TwoWay, 
        StringFormat=\{0:dd/MM/yyyy\},  UpdateSourceTrigger=Default, ValidatesOnDataErrors=True}">
    </DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
提前谢谢

private ObservableCollection<DateWrapper> _courseDatesParameterForRequest;
public ObservableCollection<DateWrapper> CourseDatesParameterForRequest
{
    get { return _courseDatesParameterForRequest; }
    set
    {
        if (value != _courseDatesParameterForRequest)
        {
            _courseDatesParameterForRequest = value;

            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(nameof(CourseDatesParameterForRequest)));
            }
        }
    }
}
   public class DateWrapper
    {
        public int ID { get; set; }
        public DateTime Date { get; set; }
        public DateWrapper(DateTime date)
        {
            Date = date;
        }
        public DateWrapper(){}
    }