我有一个同时具有ValidatesOnDataErrors = true
和的控件ValidatesOnExceptions = true
。我也有一些东西在看Validation.Errors
这个绑定的集合。
用户输入的值可转换(无例外)但无效(IDataErrorInfo 报告错误消息)。错误出现在错误集合中,并按预期显示。
然后用户输入一个不可转换的值(抛出异常)。IDataErrorInfo 仍然报告与以前相同的错误(因为模型值没有改变)。
在后一种情况下,我更愿意在列表中单独查看异常错误,但会接受同时出现异常和数据错误(以任何顺序)。
但是,实际发生的情况是只有数据错误最终出现在列表中,这最终会给用户一个误导性的错误消息(因为这是他们输入的前一个值的错误,而不是当前值)。
在内部跟踪它,似乎当第二个用户操作发生时,异常错误被添加到列表中,然后再次删除并替换为数据错误。任何时候这两个错误都不会同时出现在列表中。
任何想法如何从中获得所需的行为?
(后退一步:我想要实现的是结合 IDataErrorInfo 验证 [因为它更方便于域级测试],但仍然注意 UI 异常 [否则它会忽略用户输入某些内容时的情况完全愚蠢]。我不想走极端,让每个 VM 属性都成为字符串或其他类似的废话。)