我正在 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 绑定(bind)到名为“Concentration”的属性,该属性是 double 类型的属性,并进行验证以确保其落在给定范围内。顺便说一下,绑定(bind)到网格的模型实现了 IDataErrorInfo
。
问题是,尽管错误模板在输入无效值时会突出显示该单元格,但没有什么可以阻止我将焦点从该单元格(或行)移开。通过数据网格编辑处理验证的首选方法是什么?我想知道是否可以阻止用户在输入有效值之前离开单元格,但这可能很危险 - 在输入有效值之前他们将无法执行任何操作(甚至关闭应用程序)。
另一个选项可能是在数据网格包含任何无效行时阻止用户继续操作。但是测试这个的最好方法是什么? IDataErrorInfo 不提供“IsValid”属性,我可以在每个行的模型上检查该属性。
最后,如果用户输入无效内容,我可以将模型的属性恢复为之前的“良好”值(或默认值)。
有什么建议吗?顺便说一句,我正在使用 MVVM。
最佳答案
我用它来查看 IDataerrorInfo 对象是否有任何错误,这是实现的一个小片段:
protected Dictionary<string, string> _propertyErrors = new Dictionary<string, string>();
public bool HasErrors {
get { return (_propertyErrors.Count) > 0; }
}
然后我可以处理评估此属性后要执行的操作的逻辑。您想要阻止导航、关闭应用程序等吗?然后您需要评估该代码中的错误,然后取消该操作。
关于WPF DataGrid - 如果存在无效单元格,如何停止用户继续操作? (MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952688/