昨天,我在MVVM中询问了一个关于验证的问题,有人回复了一段代码:https://stackoverflow.com/a/13387724/
我正在尝试理解这段代码,但我只是不理解索引器部分。有人可以向我解释该代码是如何工作的吗?在使用IDataErrorInfo时是否正好调用get / set,为什么他在get-part中返回此[columnName]?
由于
答案 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。