【问题标题】:WPF IDataErrorInfo validation after Value Conversion值转换后的 WPF IDataErrorInfo 验证
【发布时间】:2014-07-14 06:53:43
【问题描述】:

我一直在四处寻找,似乎IDataErrorInfo 是目前首选的输入验证方法。

IDataErrorInfo 与值转换器结合起来对我来说有点棘手。

我问自己的一个问题,最后是 Google,是如何处理值转换器中的错误输入。一种常见的做法似乎是在输入错误的情况下返回未转换的值。这很有意义,因为视图模型/模型可以验证错误的输入并报告或多或少详细的错误描述。

但是,我在使用这种方法时遇到了一个问题。让我们尝试以下场景:

  1. 我有一个文本框绑定到 decimal 类型的属性,用户应该在其中输入价格。

  2. 我有一个值转换器,可以将小数点转换为特定于区域的小数分隔符,并将其四舍五入为两位小数。

  3. 用户在文本框中输入aa12.4

如果我的值转换器返回aa12.4(因为它是一个错误值并且未转换),当它附加到文本框绑定的价格属性时,它将自动转换为0。 0(或 0.00)是一个完全合法的价格,可以验证为真。

正如您可能理解的那样,我不希望 aa12.4 有效并神奇地转换为 0。我也放弃了所有方法来确定输入的具体错误并将其报告给用户。

我该如何处理这种情况?据我了解,处理验证的方法是在设置属性后调用的。我读过的一个想法是从转换器返回DependencyProperty.UnsetValue。另一方面,这并不能帮助验证器确定输入有什么问题,只是它是不可转换的。

【问题讨论】:

    标签: c# wpf validation converter


    【解决方案1】:

    您可以使用 ValidationRules 代替使用 IDataErrorInfo,它允许您在值被转换并发送到 ViewModel 之前对其进行检查。或者您可以遵循 Josh Smith 和其他人建议的更激进的方法,并将所有数字/其他类型的属性包装在 ViewModel 中的 String 属性中,以便 ViewModel 始终知道未转换/不可转换的值。

    顺便说一句,您不需要转换器就可以使用本地化数字格式,您可以在 Bindings 上设置 ConverterCulture。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多