我正在努力寻找一种令人满意的 WPF/MVVM 数据验证方法。我一直在使用IDataErrorInfo
,但是如果我将文本框绑定到(比如说)一个int
属性,并输入一个非数字值,WPF 会生成自己的验证消息(“无法转换值'xyz'”)。该控件确实被突出显示为错误,但我的视图模型不知道该属性处于无效状态,因为绑定(以及因此 IDataErrorInfo 验证)从未发生过。
我还没有研究自定义验证器。使用这些是否可以通知视图模型有错误?我有点不愿意使用它们,因为为复杂应用程序所需的许多规则中的每一个创建验证器类似乎有点过分。也许我可以混合使用这两种方法,即确保输入是数字的基本自定义验证器,以及用于更复杂内容的 IDataErrorInfo?
我也在努力使用 IDataErrorInfo 验证“相关”属性。假设我的模型具有“Min”和“Max”属性,我想确保 Min 小于 Max。如果我将“Min”文本框更改为大于 Max,则该控件将被正确标记为无效。如果我现在将“Max”更改为大于“Min”,则“Min”文本框验证状态不会被清除(可能是因为“Min”没有改变,因此不会再次得到验证)。这种情况的最佳方法是什么?
我很想知道其他人如何处理 WPF 验证。.Net 4.5 中的 WPF 验证是否有任何改进?