我正在尝试找出验证用户输入的最佳方法,我一直在研究ValidationRule和IDataErrorInfo。我有一个VM和一个模型,我想确保用户不会在绑定到doubles (或int)的多个textbox中输入alpha char。
我遇到了3个问题
1)当我使用ValidationRule时,该方法返回一个'ValidationResult‘,但它会去哪里呢?它是作为属性存储在什么地方吗?
2)如果我使用IDataErrorInfo并输入一些字母字符,它永远不会被调用(如果输入数字就会调用),这是预期的吗?*
*(我认为值转换器在这里可能会有所帮助,但我觉得我把两个独立的概念混在一起了)
3)我真正想做的是,当用户点击“保存”并检查所有的值时,在最后做一个验证。因此,根据1838300,使用这两种方法可能不是我所需要的。这是正确的吗,这些真的只用于“即时”验证吗?
我在第三点上的想法是,如果ValidationRule的结果被存储在某个地方,我可以检查每个控件的结果,或者它存储在哪里。或者,如果调用了IDataErrorInfo,我可以手动为每个控件存储一些布尔值并检查这些布尔值。
有什么想法或想法吗?
谢谢!
发布于 2010-06-26 01:45:57
有几件事,你需要知道:
当dependencyproperty的类型与基础值不同时-如果不存在值转换器,则尝试自动转换。
这都是正常绑定引擎的一部分。因此,由于您的textbox输入不能很好地转换为带alpha字符的int/doubles,因此会抛出一个异常,并且会不断抛出,直到您更正了dependency属性(这里是TextBox的Text属性)的值--底层dataobject的属性setter现在永远不会到达。
如果在更改文本框中的文本时查看输出窗口中是否有异常,则可以验证此行为。要了解如何正确地实现验证和IDataErrorInfo:link,请参阅本文。
发布于 2010-08-17 01:26:59
您可能会对的BookLibrary示例应用程序感兴趣。它显示了如何在WPF中使用验证,以及当存在验证错误时如何控制“保存”按钮。
https://stackoverflow.com/questions/3119697
复制相似问题