WPF数据绑定和验证规则最佳实践

时间:2008-09-15 14:56:37

标签: .net wpf data-binding validation

我有一个非常简单的WPF应用程序,我在其中使用数据绑定来允许编辑一些自定义CLR对象。我现在想要在用户单击保存时输入一些输入验证。但是,我读过的所有WPF书籍并没有真正为这个问题投入任何空间。我看到你可以创建自定义ValidationRules,但我想知道这对我的需求是否有点过分。

所以我的问题是:是否有一个很好的示例应用程序或文章,它演示了在WPF中验证用户输入的最佳实践?

6 个答案:

答案 0 :(得分:83)

我认为新的首选方式可能是使用IDataErrorInfo

了解更多here

答案 1 :(得分:23)

来自MS的Patterns & Practices documentation

  

数据验证和错误报告

     

您的视图模型或模型通常是   需要执行数据验证   并发出任何数据验证信号   视图的错误使用户   可以采取行动纠正它们。

     

Silverlight和WPF提供支持   用于管理数据验证错误   改变个人时会发生这种情况   绑定到控件的属性   在视图中。对于单个属性   这是数据绑定到控件,   视图模型或模型可以发出数据信号   属性内的验证错误   通过拒绝传入的坏事来制定   价值和抛出异常。如果   ValidatesOnExceptions属性   数据绑定是真的,数据   WPF和Silverlight中的绑定引擎   将处理异常并显示   给用户一个视觉提示   数据验证错误。

     

然而,抛出异常   这种方式的属性应该是   尽可能避免。替代   方法是实施   IDataErrorInfo或INotifyDataErrorInfo   视图模型或模型上的接口   类。这些接口允许你的   查看模型或模型以执行数据   验证一个或多个财产   值并返回错误消息   到视图,以便用户可以   通知错误。

文档继续解释如何实现IDataErrorInfo和INotifyDataErrorInfo。

答案 2 :(得分:10)

personaly,我正在使用异常来处理验证。它需要以下步骤:

  1. 在您的数据绑定表达式中,您需要添加“ValidatesOnException = True”
  2. 在您绑定的数据对象中,您需要添加DependencyPropertyChanged处理程序,在其中检查新值是否满足您的条件 - 如果不是 - 您还原到对象旧值(如果需要)并抛出异常。
  3. 在您用于在控件中显示无效值的控件模板中,您可以访问错误集合并显示异常消息。
  4. 这里的技巧是仅绑定从DependencyObject派生的对象。 INotifyPropertyChanged的简单实现不起作用 - 框架中存在一个错误,阻止您访问错误集合。

答案 3 :(得分:3)

同时检查this article。据说微软从他们的模式和实践中发布了他们的Enterprise Library (v4.0),其中他们涵盖了验证主题,但上帝知道为什么他们没有包含WPF的验证,所以我指导你的博客文章解释了作者做了什么适应它。希望这有帮助!

答案 4 :(得分:2)

您可能对 WPF Application Framework (WAF) BookLibrary 示例应用感兴趣。它显示了如何在WPF中使用验证以及如何在存在验证错误时控制“保存”按钮。

答案 5 :(得分:0)

如果您的业务类直接被您的UI使用,则最好使用IDataErrorInfo,因为它使逻辑更接近其所有者。

如果您的业务类是通过引用WCF / XmlWeb服务创建的存根类,那么您不能/不能使用IDataErrorInfo,也不能抛出Exception以与ExceptionValidationRule一起使用。相反,你可以:

  • 使用自定义ValidationRule。
  • 在WPF UI项目中定义部分类并实现IDataErrorInfo。