我使用以下文章来验证用户的输入:
http://weblogs.asp.net/monikadyrda/archive/2009/06/24/wpf-textbox-validation.aspx http://weblogs.asp.net/monikadyrda/archive/2009/07/28/wpf-textbox-validation-2.aspx
我有一个包含100多个文本框的窗口,我需要检查所有文本框是否有效。
想象一下以下情况 - >用户输入了无效值:
IsValid
财产将失败。 (如第2条所述)(不好!)所以,我的问题是:如何在视图模型中验证整个页面?
答案 0 :(得分:2)
有一篇非常好的文章here正好处理这个问题 - 我使用了这种方法,而且效果很好。
基本思想是使用附加属性 - 称之为“ValidationScope.Errors” - 将视图的验证范围绑定到视图模型中的属性。
以下是链接文章引用的代码:
public class ValidationScope { public static IList GetErrors(DependencyObject obj) { return (IList)obj.GetValue(ErrorsProperty); } public static void SetErrors(DependencyObject obj, IList value) { obj.SetValue(ErrorsProperty, value); } public static readonly DependencyProperty ErrorsProperty = DependencyProperty.RegisterAttached("Errors", typeof(IList), typeof(ValidationScope), new PropertyMetadata(null, ErrorsChanged)); public static void ErrorsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { FrameworkElement element = (FrameworkElement)obj; element.BindingValidationError += delegate(object sender, ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction.Added) { GetErrors(obj).Add(e.Error); } else { GetErrors(obj).Remove(e.Error); } }; } }
您可以通过侦听框架的BindingValidationError
事件以及向指定的视图模型目标添加/删除错误来查看此附加的依赖项属性。要在代码中使用它,只需将依赖项属性ValidationScope.Errors
绑定到视图模型中的目标属性:
<my:SomeUserControl my:ValidationScope.Errors="{Binding MyViewModel.Errors}" />
现在,您的视图模型包含一个属性“错误”,可用于检查视图是否实际有效。