代码之家  ›  专栏  ›  技术社区  ›  Miral

IDataerrorInfoandException之间的WPF验证顺序

  •  2
  • Miral  · 技术社区  · 15 年前

    我有一个同时拥有 ValidatesOnDataErrors = true ValidatesOnExceptions = true 是的。我也有东西在看 Validation.Errors 此绑定的集合。

    用户输入的值是可转换的(没有异常),但无效(IDataerrorInforeportsanerrormessage)。错误出现在错误集合中,并按预期显示。

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

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

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

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

    有什么办法让你的行为不受影响吗?

    (后退一步:我试图实现的是结合IDataerrorInfoValidation(因为它更方便进行域级测试),但仍然关注UI异常(否则它会忽略用户键入完全愚蠢的内容时的情况)。我不想让每个vm属性都变成字符串或其他这样的胡说八道。)

    1 回复  |  直到 15 年前
        1
  •  0
  •   CodeNaked    15 年前

    这个 ValidatesOnDataError ValidatesOnExceptions 只是添加 DataErrorValidationRule ExceptionValidationRule ValidationRules 分别收集。

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

    <Binding Path="StartPrice" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
            <ExceptionValidationRule />
            <DataErrorValidationRule />
        </Binding.ValidationRules>
    </Binding>
    
    推荐文章