我正在我的 DataGrid 中实现编辑功能。一个典型的CellEditingTemplate
细胞看起来像这样:-
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Grid.Column="0"
Text="{Binding Concentration, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=LostFocus}"
Validation.ErrorTemplate="{StaticResource errorTemplate}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
在此示例中,有一个 TextBox 绑定到名为“Concentration”的属性,该属性是 double 类型的属性,通过验证以确保它在给定范围内。绑定到网格的模型是IDataErrorInfo
顺便实现的。
问题是,尽管输入无效值时错误模板会突出显示单元格,但没有什么可以阻止我将焦点从该单元格(或行)移开。使用数据网格编辑处理验证的首选方法是什么?我想知道是否可以阻止用户在输入有效值之前离开单元格,但这可能很危险——在输入有效值之前,他们将无法做任何事情(甚至关闭应用程序)。
如果数据网格包含任何无效行,另一个选项可能是阻止用户继续。但是测试这个的最好方法是什么?IDataErrorInfo 没有提供我可以在每个行的模型上检查的“IsValid”属性。
最后,如果用户输入的内容无效,我可以将模型的属性恢复为之前的“好”值(或默认值)。
有什么建议么?顺便说一句,我正在使用 MVVM。