首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDataErrorInfo和对象的属性验证

IDataErrorInfo和对象的属性验证
EN

Stack Overflow用户
提问于 2009-07-14 02:16:49
回答 2查看 1.9K关注 0票数 2

由于我正在尝试学习WPF,我看到越来越多地使用接口IDataErrorInfo将错误绑定到接口。我的问题是,我通常把数据的验证放在属性的设置器中,而不是在像IDataErrorInfo.thisstring columnName这样的方法中。这是我发现的一个让我困惑的博客

在.Net 3.5中验证数据对象的好方法是什么?是否需要在Setter和IDataErrorInfo调用的方法中实现验证?或者仅仅是IDataErrorInfo?还是在策划人打电话给IDataErrorInfo?

示例:我有一个名字符串,只能有3到50个字符。我是将字符串验证放在setter中(我通常会这样做),还是现在我可以简单地使用IDataErrorINfo.this方法,检查属性名称,并在数据长度不太长时返回字符串错误?我发现在setter中抛出错误而不使用接口更直观,但我看到的大多数示例都使用了IDataErrorInfo接口。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-14 04:07:40

如果您在setter中抛出一个异常,那么IDataErrorInfo是多余的,因为它(理论上)不能进入非法状态。IDataErrorInfo允许您接受所有输入,但是告诉用户有问题。这样做的好处是,它可以减少对UI的干扰(因为用户可以继续输入数据,即使有一个字段出现错误并标记为这样),而且很容易同时报告多个错误--视觉上的,而不是消息框等。

但是,如果您使用此路径,则需要确保在将对象保存到数据库之前验证对象是否正常,等等。

您可以通过从业务逻辑中检查.Error (并检查它是null/empty)来实现这一点,前提是编写.Error来报告所有错误。或者类似的Validate()方法。

票数 2
EN

Stack Overflow用户

发布于 2009-07-14 05:30:53

我相信IDataError允许更丰富的用户体验。就像Marc说的,它允许较少的中断,特别是在编辑网格时。客户对象列表。

我建议您从由Rocky开发的CSLA.net框架中下载(他是专家C# 2008 Business的作者)。该框架支持验证规则,每个业务对象都实现IDataError。每次更改属性时,都会验证该属性的规则。如果属性值无效,则对象状态将变为invalid,每当调用Save()方法时,就会引发异常。

他的框架还支持n级撤销。当您开始编辑业务对象时,会获取该对象的快照(包括已损坏的规则)。因此,如果您决定回滚您的更改,则对象的状态将返回到以前的状态--甚至是中断的规则!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1123140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档