WPF 数据绑定和验证规则最佳实践
-
09-06-2019 - |
题
我有一个非常简单的 WPF 应用程序,在其中使用数据绑定来允许编辑一些自定义 CLR 对象。我现在想在用户单击“保存”时进行一些输入验证。然而,我读过的所有 WPF 书籍并没有真正为这个问题投入任何篇幅。我看到您可以创建自定义验证规则,但我想知道这是否对我的需求来说太过分了。
所以我的问题是这样的:是否有一个很好的示例应用程序或文章可以演示在 WPF 中验证用户输入的最佳实践?
解决方案
我认为新的首选方法可能是使用 IDataErrorInfo
阅读更多 这里
其他提示
来自MS的 模式和实践文档:
数据验证和错误报告
通常,您的视图模型或模型通常需要执行数据验证并向视图发出任何数据验证错误,以便用户可以采取行动来纠正它们。
Silverlight和WPF为管理数据验证错误的管理提供了支持,这些错误会在视图中绑定到控件的单个属性时发生。对于数据结合到控件的单个属性,视图模型或模型可以通过拒绝传入的不良值并抛出异常来在属性设置器中发出数据验证错误。如果数据绑定上的验证Xpections属性是正确的,则WPF中的数据绑定引擎将处理异常,并向用户显示出数据验证错误的视觉提示。
但是,应尽可能避免以这种方式进行属性。另一种方法是在视图模型或模型类上实现IDATAERRORINFO或INOTIFYDATAERRORINFO接口。这些接口允许您的视图模型或模型对一个或多个属性值执行数据验证,并将错误消息返回视图,以便可以通知用户错误。
该文档继续解释如何实现 IDataErrorInfo 和 INotifyDataErrorInfo。
就我个人而言,我使用异常来处理验证。它需要以下步骤:
- 在数据绑定表达式中,您需要添加“ValidatesOnException=True”
- 在要绑定的数据对象中,您需要添加 DependencyPropertyChanged 处理程序,在其中检查新值是否满足您的条件 - 如果不满足 - 您恢复到对象旧值(如果需要)并抛出异常。
- 在用于在控件中显示无效值的控件模板中,您可以访问错误集合并显示异常消息。
这里的技巧是仅绑定到从 DependencyObject 派生的对象。INotifyPropertyChanged 的简单实现是行不通的 - 框架中存在一个错误,它会阻止您访问错误集合。
您可能对 图书图书馆 的示例应用程序 WPF 应用程序框架 (WAF). 。它展示了如何在 WPF 中使用验证以及如何在存在验证错误时控制“保存”按钮。
如果您的业务类直接由 UI 使用,则最好使用 IDataErrorInfo,因为它使逻辑更接近其所有者。
如果您的业务类是通过引用 WCF/XmlWeb 服务创建的存根类,那么您不能/不得使用 IDataErrorInfo,也不能抛出与 ExceptionValidationRule 一起使用的 Exception。相反,您可以:
- 使用自定义验证规则。
- 在 WPF UI 项目中定义一个分部类并实现 IDataErrorInfo。