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

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

我遇到了三个问题

1)当我使用ValidationRule时,该方法返回“ValidationResult”,但它存储在哪里?它存储为某个属性吗?

2)如果我使用IDataErrorInfo并输入一些字母,它永远不会被调用(如果输入数字,则会调用)。这是预期的吗? *

*(我认为可能值转换器可以帮助解决这个问题,但我觉得我正在混合两个不同的概念)

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

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

有什么想法或建议吗?

谢谢!

2个回答

1

有几件事情需要注意:

当依赖属性的类型与底层值不同时,如果没有值转换器,则会尝试自动转换。

这都是正常绑定引擎的一部分。因此,由于您的文本框输入无法很好地转换为带有字母字符的整数/双精度浮点数,因此会抛出异常,并且将持续抛出直到您更正依赖属性(此处为TextBox的Text属性)的值 - 底层数据对象的属性设置器现在永远不会被触发。

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


0

你可能会对WPF应用程序框架(WAF)BookLibrary示例应用程序感兴趣。它展示了如何在WPF中使用验证以及如何在存在验证错误时控制保存按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接