4

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

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

谢谢

4

1 回答 1

2

我写这篇文章时,他的代码有问题。get如果调用, ter 会抛出 StackOverflowException 。

当绑定配置为执行验证时

<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声明,属性名称都是 individual cases。

于 2012-11-15T14:31:20.650 回答