2

我有一个同时具有ValidatesOnDataErrors = true和的控件ValidatesOnExceptions = true。我也有一些东西在看Validation.Errors这个绑定的集合。

用户输入的值可转换(无例外)但无效(IDataErrorInfo 报告错误消息)。错误出现在错误集合中,并按预期显示。

然后用户输入一个不可转换的值(抛出异常)。IDataErrorInfo 仍然报告与以前相同的错误(因为模型值没有改变)。

在后一种情况下,我更愿意在列表中单独查看异常错误,但会接受同时出现异常和数据错误(以任何顺序)。

但是,实际发生的情况是只有数据错误最终出现在列表中,这最终会给用户一个误导性的错误消息(因为这是他们输入的前一个值的错误,而不是当前值)。

在内部跟踪它,似乎当第二个用户操作发生时,异常错误被添加到列表中,然后再次删除并替换为数据错误。任何时候这两个错误都不会同时出现在列表中。

任何想法如何从中获得所需的行为?

(后退一步:我想要实现的是结合 IDataErrorInfo 验证 [因为它更方便于域级测试],但仍然注意 UI 异常 [否则它会忽略用户输入某些内容时的情况完全愚蠢]。我不想走极端,让每个 VM 属性都成为字符串或其他类似的废话。)

4

1 回答 1

0

ValidatesOnDataErrorValidatesOnExceptions只是帮助属性,它们分别将DataErrorValidationRuleExceptionValidationRule的实例添加到ValidationRules集合中。

因此,您可以通过显式定义顺序来使 ExceptionValidationRule 优先,如下所示:

<Binding Path="StartPrice" UpdateSourceTrigger="PropertyChanged">
    <Binding.ValidationRules>
        <ExceptionValidationRule />
        <DataErrorValidationRule />
    </Binding.ValidationRules>
</Binding>
于 2011-03-13T21:27:28.847 回答