【发布时间】:2017-03-02 09:38:52
【问题描述】:
我有一个采用 MVVM 架构的 WPF 应用程序。视图模型实现 IDataErrorInfo 的实现将添加来自嵌套视图模型的错误。 SaveCommand 将检查最顶层视图模型的错误,并在所有错误列表中显示错误消息框。
这适用于业务逻辑检查的错误(如必填字段),但不会处理转换错误,例如用户在绑定到数字属性的 TextBox 中输入名称。
有没有一种好的方法/库可以结合来自 ViewModel 的错误和那些在 UI 中指示但实际上并没有到达 viewmodel 的错误?回退到视图模型中的所有字符串属性,以便可以在那里进行转换,感觉是错误的。我想过通过逻辑控制树来获取由转换错误引起的所有错误的列表,然后将此列表与 INotifyDataInfo errorMessage 结合起来,但也许有更好的方法?
【问题讨论】:
-
很多这样的问题可以通过使用适当的控件来解决,如果用户应该输入一个介于 1 和 100 之间的值,为什么在设计滑块时使用文本框,视图模型不应该验证视图,它只验证视图传递给它的数据。所以任何做你想做的库都会违反 MVVM
-
用户在绑定到数字属性的 TextBox 中输入名称 应该会在 UI 中自动显示错误
-
它显示控件中的错误,但视图模型对此一无所知,因为错误来自绑定的值转换。因此,当调用 Save 时依赖于它自己的 IDataErrorInfo 有效的视图模型将使用未更改的值执行保存,而某些控件显示绑定错误。
标签: wpf validation mvvm idataerrorinfo