0

我正在努力寻找一种令人满意的 WPF/MVVM 数据验证方法。我一直在使用IDataErrorInfo,但是如果我将文本框绑定到(比如说)一个int属性,并输入一个非数字值,WPF 会生成自己的验证消息(“无法转换值'xyz'”)。该控件确实被突出显示为错误,但我的视图模型不知道该属性处于无效状态,因为绑定(以及因此 IDataErrorInfo 验证)从未发生过。

我还没有研究自定义验证器。使用这些是否可以通知视图模型有错误?我有点不愿意使用它们,因为为复杂应用程序所需的许多规则中的每一个创建验证器类似乎有点过分。也许我可以混合使用这两种方法,即确保输入是数字的基本自定义验证器,以及用于更复杂内容的 IDataErrorInfo?

我也在努力使用 IDataErrorInfo 验证“相关”属性。假设我的模型具有“Min”和“Max”属性,我想确保 Min 小于 Max。如果我将“Min”文本框更改为大于 Max,则该控件将被正确标记为无效。如果我现在将“Max”更改为大于“Min”,则“Min”文本框验证状态不会被清除(可能是因为“Min”没有改变,因此不会再次得到验证)。这种情况的最佳方法是什么?

我很想知道其他人如何处理 WPF 验证。.Net 4.5 中的 WPF 验证是否有任何改进?

4

1 回答 1

1

怀疑您知道这一点,但如果类型不匹配(或无法转换),则 set 甚至不会被调用。

绑定到 Int 的空 TextBox 有这个问题吗?因为 TextBox 正在传递 String.Empty 而不是 null。所以使用转换器将 String.Empty 转换为 null。

TextBox 将接受文本。没有办法解决这个问题。

您可以绑定到字符串,以便一切都通过集合。

或者您可以在 UI 上处理 keydown 事件,并且只允许数字并绑定到 Int。然后在验证中确定该值是否在范围内。

于 2012-08-21T15:08:22.977 回答