自从我尝试学习 WPF 以来,我看到越来越多地使用接口(interface) IDataErrorInfo 将错误绑定(bind)到接口(interface)。我的问题是,我通常将数据的验证放在属性的 setter 中,而不是放在像 IDataErrorInfo.this[string columnName] 这样的方法中...这是一个 blog我发现这让我很困惑。
在 .Net 3.5 中验证数据对象的好方法是什么?我是否需要在 Setter 和 IDataErrorInfo 调用的方法中实现验证?或者只是 IDataErrorInfo?或者在setter中调用IDataErrorInfo?
示例:我有一个名字字符串,只能包含 3 到 50 个字符。我是否将字符串验证放在 setter 中(我通常会这样做),或者现在我可以简单地使用 IDataErrorINfo.this 方法,检查属性名称并在数据长度不合适时返回字符串错误?我发现在 setter 中抛出错误而不使用 Interface 更直观,但我看到的大多数示例都使用 IDataErrorInfo 接口(interface)。
最佳答案
如果您在 setter 中引发异常,则 IDataErrorInfo
是多余的,因为它(理论上)无法进入非法状态。 IDataErrorInfo
允许您接受所有输入,但告诉用户存在问题。这样做的好处是,它可以减少对 UI 的干扰(因为即使一个字段出错并被标记为错误,用户也可以继续输入数据),并且很容易报告多个立即出错 - 视觉上的,而不是通过消息框等。
但是,如果您采用此方法,则需要确保在将对象保存到数据库等之前验证该对象是否正常。
您可以通过从业务逻辑中检查 .Error
来完成此操作(并检查它是否为 null
/empty),假设您编写了 .Error
报告所有错误。或者类似的 Validate()
方法。
关于c# - IDataErrorInfo 和对象的属性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123140/