由于我正在尝试学习WPF,我看到越来越多地使用接口IDataErrorInfo将错误绑定到接口。我的问题是,我通常把数据的验证放在属性的设置器中,而不是在像IDataErrorInfo.thisstring columnName这样的方法中。这是我发现的一个让我困惑的博客。
在.Net 3.5中验证数据对象的好方法是什么?是否需要在Setter和IDataErrorInfo调用的方法中实现验证?或者仅仅是IDataErrorInfo?还是在策划人打电话给IDataErrorInfo?
示例:我有一个名字符串,只能有3到50个字符。我是将字符串验证放在setter中(我通常会这样做),还是现在我可以简单地使用IDataErrorINfo.this方法,检查属性名称,并在数据长度不太长时返回字符串错误?我发现在setter中抛出错误而不使用接口更直观,但我看到的大多数示例都使用了IDataErrorInfo接口。
发布于 2009-07-14 04:07:40
如果您在setter中抛出一个异常,那么IDataErrorInfo是多余的,因为它(理论上)不能进入非法状态。IDataErrorInfo允许您接受所有输入,但是告诉用户有问题。这样做的好处是,它可以减少对UI的干扰(因为用户可以继续输入数据,即使有一个字段出现错误并标记为这样),而且很容易同时报告多个错误--视觉上的,而不是消息框等。
但是,如果您使用此路径,则需要确保在将对象保存到数据库之前验证对象是否正常,等等。
您可以通过从业务逻辑中检查.Error (并检查它是null/empty)来实现这一点,前提是编写.Error来报告所有错误。或者类似的Validate()方法。
发布于 2009-07-14 05:30:53
我相信IDataError允许更丰富的用户体验。就像Marc说的,它允许较少的中断,特别是在编辑网格时。客户对象列表。
我建议您从由Rocky开发的CSLA.net框架中下载(他是专家C# 2008 Business的作者)。该框架支持验证规则,每个业务对象都实现IDataError。每次更改属性时,都会验证该属性的规则。如果属性值无效,则对象状态将变为invalid,每当调用Save()方法时,就会引发异常。
他的框架还支持n级撤销。当您开始编辑业务对象时,会获取该对象的快照(包括已损坏的规则)。因此,如果您决定回滚您的更改,则对象的状态将返回到以前的状态--甚至是中断的规则!
https://stackoverflow.com/questions/1123140
复制相似问题