WPF绑定: 使用DataAnnotations进行验证规则
WPF绑定: 使用DataAnnotations进行验证规则
我已经阅读了很多有关WPF验证和DataAnnotations的博客文章。我想知道是否有一种简洁的方法可以将DataAnnotations作为我的实体的ValidationRules使用。所以,不是像这样使用(http://msdn.microsoft.com/en-us/library/system.windows.data.binding.validationrules.aspx):
在这种情况下,您必须拥有以下内容:
public class AgeRangeRule : ValidationRule
{...}
我希望WPF绑定能够查看Age属性并查找DataAnnotation,就像这样:
[Range(1, 120)]
public int Age
{
get { return _age; }
set
{
_age = value;
RaisePropertyChanged<...>(x => x.Age);
}
}
有什么想法吗?
WPF绑定:使用DataAnnotations进行验证规则的原因和解决方法
在WPF中,我们经常需要对用户输入的数据进行验证。一种常见的方法是使用DataAnnotations,它允许我们在属性上应用验证规则。然而,有时我们希望在验证规则失败时收集错误信息并在界面上显示出来。本文将介绍一个使用DataAnnotations进行验证规则并收集错误信息的解决方法。
问题的出现原因:
问题的解决方法:
首先,我们需要创建一个IDataErrorInfo接口的实现类。在这个类中,我们可以使用DataAnnotations来定义属性的验证规则。例如,我们可以使用StringLength属性来限制Name属性的长度,并指定错误消息。然后,我们可以在这个类中实现索引器,根据属性名调用ValidateProperty方法来获取验证错误信息。
接下来,我们需要在XAML中使用ValidatesOnDataErrors属性来启用数据错误的验证。这样,当属性的值发生变化时,WPF将自动调用IDataErrorInfo的索引器来获取错误信息,并在界面上显示出来。
通过使用DataAnnotations和IDataErrorInfo接口,我们可以很方便地实现对用户输入数据的验证和错误信息的收集。这种方法可以让我们更轻松地进行数据验证,提高用户体验。
参考文献:
- [WPF Commanding and Data Annotations Validation](http://babaandthepigman.wordpress.com/2010/02/14/wpf-commanding-and-data-annotations-validation/)
- [IDataErrorInfo Interface](http://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx)
- [Using IDataErrorInfo for Validation in MVVM with Silverlight and WPF](http://www.arrangeactassert.com/using-idataerrorinfo-for-validation-in-mvvm-with-silverlight-and-wpf/)
WPF Binding: 使用DataAnnotations进行ValidationRules
在你的模型中,你可以实现IDataErrorInfo并做如下操作...
string IDataErrorInfo.this[string columnName] { get { if (columnName == "Age") { if (Age < 0 || Age > 120) { return "You must be between 1 - 120"; } } return null; } }
你还需要通知绑定目标有关新定义行为的信息。
编辑:
如果你只想使用Data Annotations,你可以参考这篇博客文章,其中详细介绍了如何完成这个任务。
更新:
上述链接的历史记录。
它可以正常工作,但是它使用了DataAnnotations。这非常棒。
你可以在SL中使用这个方法,但是在WPF中默认情况下不能做到;不过它是可以实现的...更新的答案...
所以你的意思是,检查DataAnnotation的机制只存在于SilverLight中而不是WPF中?我尝试了博客文章中的示例。它可以工作,但是你必须手动检查每个属性中的DataAnnotation。我在寻找WPF框架是否能够像SilverLight一样自动检查我的属性上的DataAnnotations。
是的,内置的行为是SL而不是WPF。
教程的链接已经失效。
使用Web Archive更新链接。
问题的原因是作者想在WPF中使用数据绑定进行验证,但是他之前在WinForms中使用的验证方法在WPF中无法直接使用。他之前在WinForms中使用的方法是通过使用Validation Application Block from the Entlib以及实现IDataErrorInfo接口来实现验证。作者认为这种方法更加高级和可维护,因为验证逻辑是放在对象上而不是接口实现中。作者还提到在IDataErrorInfo接口中调用Validation.Validate(this)进行验证,并且需要调用[SelfValidation]进行属性组合的验证。
解决方法是作者建议在WPF中使用DataAnnotations进行验证。使用DataAnnotations可以通过在属性上添加特性来定义验证规则。作者认为这种方法更加简单和直观,而且可以与其他框架(如MVVM框架)很好地集成。
问题的原因是作者想在WPF中进行数据绑定的验证,但之前在WinForms中使用的验证方法在WPF中无法直接使用。解决方法是使用DataAnnotations进行验证,通过在属性上添加特性来定义验证规则。这种方法更加简单、直观,并且可以与其他框架很好地集成。