c# - IDataErrorInfo - 它是如何工作的

标签 c# wpf mvvm

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

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

谢谢

最佳答案

在我写这篇文章时,他的代码有问题。如果被调用,getter 将抛出 StackOverflowException。

当绑定(bind)配置为执行验证时

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

如果数据源对象实现IDataErrorInfo,绑定(bind)系统将会, 使用该接口(interface)的两个方法执行验证。

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

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

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

关于c# - IDataErrorInfo - 它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394566/

相关文章:

wpf - 如何将集合绑定(bind)到数据网格列

android - ViewModelProviders 实例失败,因为无法解析 "of"

c# - 从左到右的表达式评估

c# - 为最简单的 xml 文件编写最简单的 XML 反序列化类。如何避免嵌套?在根目录反序列化?

wpf - WPF GridViewItem 控件的默认前景色是什么?

wpf - 在 WPF 中为字符串资源添加回车

wpf - 绑定(bind)到集合元素的属性

c# - 读取麦克风分贝和音调/频率

c# - 带列的 TreeView

c# - WPF 中的高效位图操作 (C#)