IDataErrorInfo - 它是如何工作的

时间:2012-11-15 09:27:15

标签: c# wpf mvvm

昨天,我在MVVM中询问了一个关于验证的问题,有人回复了一段代码:https://stackoverflow.com/a/13387724/

我正在尝试理解这段代码,但我只是不理解索引器部分。有人可以向我解释该代码是如何工作的吗?在使用IDataErrorInfo时是否正好调用get / set,为什么他在get-part中返回此[columnName]?

由于

1 个答案:

答案 0 :(得分:2)

我写这篇文章时他的代码很麻烦。如果被调用,get将抛出StackOverflowException。

将Binding配置为执行验证时

<TextBox Text="{Binding Hurr, ValidatesOnDataErrors=true}" />

如果数据源对象实现IDataErrorInfo,绑定系统将使用该接口的两种方法来执行验证。

接口的索引器接受一个字符串,该字符串是要验证的属性的名称,并返回一个字符串,该字符串是属性当前值的验证错误(如果有)。

这方面的一个例子可能是......

var pet = new Pet();
var error = pet["Name"]; //"Your pet has no name!"
pet.Name = "Fido";
error = pet["Name"]; //"Come on, how unoriginal is that?"

他的特定代码示例是在getter / setter中处理奇数类型的验证。它不是实现IDataErrorInfo应该如何实现的一个普遍的例子,但更可能是通过他自己的个人接触来掠夺他自己的个人代码。大多数人都有自己的实现方式,但是9/10次它将成为switch语句,其属性名称都是单独的case s。