WPF DataGrid - 如果存在无效单元格,如何停止用户继续操作? (MVVM)

标签 wpf mvvm wpfdatagrid

我正在 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/

相关文章:

c# - 如何使用 ContentStringFormat 显示百分比值?

c# - 我什么时候可以处理 IDisposable WPF 控件,例如Windows 窗体主机?

c# - 在 View 模型中实现 IDataErrorInfo

c# - 在大型 wpf 数据网格中移动/隐藏列的性能问题

.net - WPF 数据网格 : resizing columns

wpf:获取组合框值

wpf - 从合并序列中删除 IObservable

c# - WPF : MenuItem. 命令参数绑定(bind)设置为空

c# - 使用 MVVM 时,在代码中的什么位置以及如何告诉文本框显示临时加载消息?

c# - 在 WPF DataGrid 中按下 Enter 键时将焦点移至下一个单元格?