WPF(.net 3.5)验证规则,IDataErrorInfo

WPF(.net 3.5)验证规则,IDataErrorInfo,wpf,validation,data-binding,Wpf,Validation,Data Binding,我正在尝试找出验证用户输入的最佳方法,我一直在研究ValidationRule和IDataErrorInfo。我有一个VM和一个模型,我想确保用户不会在绑定到double(或int)的多个文本框中输入alpha字符 我遇到了三个问题 1) 当我使用ValidationRule时,该方法返回一个“ValidationResult”,但它会去哪里?它作为财产存储在哪里 2) 如果我使用IDataErrorInfo并输入一些alpha字符,它将永远不会被调用(如果输入了数字),这是预期的吗* *(我想

我正在尝试找出验证用户输入的最佳方法,我一直在研究ValidationRule和IDataErrorInfo。我有一个VM和一个模型,我想确保用户不会在绑定到double(或int)的多个文本框中输入alpha字符

我遇到了三个问题

1) 当我使用ValidationRule时,该方法返回一个“ValidationResult”,但它会去哪里?它作为财产存储在哪里

2) 如果我使用IDataErrorInfo并输入一些alpha字符,它将永远不会被调用(如果输入了数字),这是预期的吗*

*(我想也许一个值转换器在这里会有所帮助,但我觉得我把两个不同的概念混合在一起了)

3) 实际上,我想做的是在用户单击“保存”并检查所有值的最后进行验证。因此,也许使用这两种方法并不是我所需要的。这是正确的吗?这些真的只用于“即时”验证吗

我在第3点上的想法是,如果ValidationRule的结果存储在某个地方,我可以检查每个控件的结果,或者它存储在什么地方。或者,如果调用IDataErrorInfo,我可以为每个控件手动存储一些布尔值并进行检查

有什么想法或想法吗


谢谢

有几件事你需要知道:

当dependencyproperty的类型与基础值不同时-如果不存在valueconverter,将尝试自动转换

这是正常绑定引擎的所有部分。因此,由于您的textbox输入不能很好地转换为带有alpha字符的int/double,因此会引发一个异常,并将持续引发该异常,直到您更正dependency属性(此处为textbox的Text属性)的值为止—现在永远不会到达底层dataobject的属性设置器


如果更改文本框中的文本时在输出窗口中查找异常,则可以验证此行为。请参阅本文,了解如何正确实施验证和IDataErrorInfo:。

您可能对图书库示例应用程序感兴趣。它展示了如何在WPF中使用验证,以及在存在验证错误时如何控制“保存”按钮