我有一个非常简单的WPF应用程序,其中我使用数据绑定来允许编辑一些自定义CLR对象。我现在想在用户单击保存时进行一些输入验证。然而,我阅读过的所有WPF书籍都没有真正专门讨论这个问题。我看到您可以创建自定义ValidationRules,但是我想知道这是否会超出我的需求范围。
因此,我的问题是:是否有一个好的示例应用程序或文章,展示了在WPF中验证用户输入的最佳实践?
我有一个非常简单的WPF应用程序,其中我使用数据绑定来允许编辑一些自定义CLR对象。我现在想在用户单击保存时进行一些输入验证。然而,我阅读过的所有WPF书籍都没有真正专门讨论这个问题。我看到您可以创建自定义ValidationRules,但是我想知道这是否会超出我的需求范围。
因此,我的问题是:是否有一个好的示例应用程序或文章,展示了在WPF中验证用户输入的最佳实践?
我认为现在更倾向于使用IDataErrorInfo的方式进行数据验证。
在此处阅读更多信息:这里
数据验证和错误报告
你的视图模型或模型通常需要执行数据验证,并向视图发出任何数据验证错误信号,以便用户可以采取措施进行更正。
Silverlight和WPF提供了支持,在更改与视图中绑定到控件的单个属性时发生数据验证错误的情况下进行管理。对于一个绑定到控件的单个属性,如果视图模型或模型拒绝一个不良值并抛出异常,则可以在该属性的setter中发出数据验证错误。如果数据绑定上的ValidatesOnExceptions属性为true,则WPF和Silverlight中的数据绑定引擎将处理异常并向用户显示视觉提示,表明存在数据验证错误。
但是,在某些情况下应避免使用此方式使用属性来抛出异常。另一种方法是在视图模型或模型类上实现IDataErrorInfo或INotifyDataErrorInfo接口。这些接口允许您的视图模型或模型对一个或多个属性值进行数据验证,并返回错误信息以便通知视图用户出现了错误。
该文档继续解释了如何实现IDataErrorInfo和INotifyDataErrorInfo接口。
个人而言,我使用异常来处理验证。它需要以下步骤:
这里的诀窍是仅绑定到从DependencyObject派生的对象。简单的INotifyPropertyChanged实现无法工作-框架中存在一个错误,防止您访问错误集合。
如果您的业务类直接被UI使用,最好使用IDataErrorInfo,因为它将逻辑放置在其所有者附近。
如果您的业务类是通过对WCF/XmlWeb服务的引用创建的存根类,则不能/不应使用IDataErrorInfo或抛出Exception以供ExceptionValidationRule使用。而是可以: