C# WPF DataGrid:LostKeyboardFocus与iEdit和AddRows
我有一个WPFC# 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可以解决这一问题,但当我的代码将基础集合(以便于连续用户输入)重置为单个项
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(){}
}