【发布时间】:2012-08-21 14:13:04
【问题描述】:
我正在努力寻找一种令人满意的 WPF/MVVM 数据验证方法。我一直在使用IDataErrorInfo,但如果我将一个文本框绑定到(比如说)int 属性,并输入一个非数字值,WPF 会生成自己的验证消息(“无法转换值'xyz'”) .该控件确实被突出显示为错误,但我的视图模型不知道该属性处于无效状态,因为绑定(以及因此 IDataErrorInfo 验证)从未发生过。
我还没有研究自定义验证器。使用这些是否可以通知视图模型有错误?我有点不愿意使用它们,因为为复杂应用程序所需的许多规则中的每一个创建验证器类似乎有点过分。也许我可以混合使用这两种方法,即确保输入是数字的基本自定义验证器,以及用于更复杂内容的 IDataErrorInfo?
我还在努力使用 IDataErrorInfo 验证“相关”属性。假设我的模型具有“Min”和“Max”属性,我想确保 Min 小于 Max。如果我将“Min”文本框更改为大于 Max,则该控件将被正确标记为无效。如果我现在将“Max”更改为大于“Min”,则“Min”文本框验证状态不会被清除(可能是因为“Min”没有改变,因此不会再次得到验证)。这种情况的最佳方法是什么?
我很想知道其他人是如何处理 WPF 验证的。 .Net 4.5 中的 WPF 验证是否有任何改进?
【问题讨论】:
-
你看过 ValidationRules 和 BindingGroups 吗? shujaat.net/2010/07/wpf-validation-using-validation-rules.html ...该博客中还有很多其他帖子与验证有关。
-
我之前遇到过验证两个相关属性的问题,有我的问答here
-
当我在问题中提到“自定义验证器”时,我指的是 ValidationRules - 如果不清楚,请道歉。
-
接受 Blam 的响应作为使用字符串属性的答案似乎是我发现解决绑定期间数据转换失败问题的唯一方法。
标签: wpf