验证异常与IDataErrorInfo和新的INotifyDataErrorInfo

时间:2012-05-09 14:43:19

标签: c# wpf validation idataerrorinfo inotifydataerrorinfo

我正在尝试不同的验证方法,我遇到了新的INotifyDataErrorInfo接口问题。

例如,在写入仅接受10个字符的绑定文本框时。我写了11个字符和标签。验证启动并将文本框标记为红色等等。现在,我不想将此无效值写入此绑定的源,但如果我不这样做,我立即将文本框中的值重置为最后有效值。就好像绑定在它的绑定上执行UpdateTarget,即使出现错误。

通过使用ValidatesOnExceptions并在setter中抛出异常,我得到了我所追求的行为。如果在setter中抛出了异常,则绑定不会从源更新它的值。这会在文本框中留下无效值,以便我可以使用它来使其有效。我认为这比必须在底层对象中存储无效值要好得多。

问题是为什么IDataErrorInfo和新的INotifyDataErrorInfo以这种方式运行,即使存在错误,它也会从源更新目标?我可以使它更像ValidatesOnExceptions吗?

我需要INotifyDataErrorInfo,因为其他功能,如异步验证......

1 个答案:

答案 0 :(得分:2)

如果您需要在将值提交到源之前验证该值,则需要创建自定义验证规则并将ValidationStep设置为RawProposedValue或ConvertedProposedValue。

有关详细信息,请参阅Validation ProcessValidationStep上的文档。