我有一个DataGridTextColumn
的WPF UpdateSourceTrigger=Default
。
它允许用户输入可变数量的日期(日期本身包含在类中,用于绑定目的)。
但是(使用DataGrid
)当用户使用Tab键导航离开UpdateSourceTrigger
时,他正在编辑的单元格似乎没有离开编辑模式 /得到验证。
输入的值显示为红色,行标题显示由虚线框起的感叹号。
将LostFocus
设置为DataGrid
会修复 - 但是当我的代码将基础集合(以便于连续用户输入)重置为单项集合时,CanUserAddRows="True"
仅显示单个行。尽管Mode
新的空行仍然缺失(如果我的代码只是通过清除它来重置集合,则只会显示列标题。)
我尝试通过将OneWayToSource
设置为DataGrid
来解决此问题 - 但UpdateSourceTrigger
不再显示输入的值。
如果我将PropertyChanged
设置为<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>
,验证即将发生,从而导致糟糕的用户体验(日期应格式为DD / MM / YYYY。但是,一旦用户输入&#34; 1/1&#34;,&#34; 01/01 / 2016&#34;显示。使用退格编辑年份,使值更改为&#34; 01 / 01/0201&#34;等等)
似乎有一个解决方案(documented)需要代码隐藏,但我更喜欢更清洁的解决方案。
我的代码:
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(){}
}
async_result = some_task.delay(arg1)
result = async_result.get()
提前致谢!