【发布时间】:2014-07-14 06:53:43
【问题描述】:
我一直在四处寻找,似乎IDataErrorInfo 是目前首选的输入验证方法。
将IDataErrorInfo 与值转换器结合起来对我来说有点棘手。
我问自己的一个问题,最后是 Google,是如何处理值转换器中的错误输入。一种常见的做法似乎是在输入错误的情况下返回未转换的值。这很有意义,因为视图模型/模型可以验证错误的输入并报告或多或少详细的错误描述。
但是,我在使用这种方法时遇到了一个问题。让我们尝试以下场景:
我有一个文本框绑定到
decimal类型的属性,用户应该在其中输入价格。我有一个值转换器,可以将小数点转换为特定于区域的小数分隔符,并将其四舍五入为两位小数。
用户在文本框中输入
aa12.4。
如果我的值转换器返回aa12.4(因为它是一个错误值并且未转换),当它附加到文本框绑定的价格属性时,它将自动转换为0。 0(或 0.00)是一个完全合法的价格,可以验证为真。
正如您可能理解的那样,我不希望 aa12.4 有效并神奇地转换为 0。我也放弃了所有方法来确定输入的具体错误并将其报告给用户。
我该如何处理这种情况?据我了解,处理验证的方法是在设置属性后调用的。我读过的一个想法是从转换器返回DependencyProperty.UnsetValue。另一方面,这并不能帮助验证器确定输入有什么问题,只是它是不可转换的。
【问题讨论】:
标签: c# wpf validation converter