Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF验证:如何验证整个页面_Wpf_Validation_Mvvm - Fatal编程技术网

WPF验证:如何验证整个页面

WPF验证:如何验证整个页面,wpf,validation,mvvm,Wpf,Validation,Mvvm,我使用以下文章验证用户的输入: 我有一个100+文本框的窗口,我需要检查所有文本框是否有效 设想以下情况->用户输入了无效值: 1) 验证规则将验证错误并显示错误 信息(好!) 2) viewmodel将不知道该值已更改 已更新(使用无效字符串)。它将与它的旧 价值观 3) 因此,将启用的“保存”按钮绑定到的任何尝试都是有效的 财产将破产。(如第2条所述)(坏!) 因此,我的问题是:如何在视图模型中验证整个页面?有一篇非常好的文章正是针对这个问题的——我使用了这种方法,而且效果很好 基本

我使用以下文章验证用户的输入:

我有一个100+文本框的窗口,我需要检查所有文本框是否有效

设想以下情况->用户输入了无效值:

  • 1) 验证规则将验证错误并显示错误 信息(好!)
  • 2) viewmodel将不知道该值已更改 已更新(使用无效字符串)。它将与它的旧 价值观
  • 3) 因此,将启用的“保存”按钮绑定到
    的任何尝试都是有效的
    
    财产将破产。(如第2条所述)(坏!)

因此,我的问题是:如何在视图模型中验证整个页面?

有一篇非常好的文章正是针对这个问题的——我使用了这种方法,而且效果很好

基本思想是使用附加属性(称为“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); } }; } }
现在,您的视图模型包含一个属性“Errors”,您可以使用它来检查视图是否实际有效。

非常好!我还没有测试过它,但它似乎正是我想要的。提供的示例是针对silverlight的。有些功能将不可用work@guilhermecgs啊。。。很抱歉。我使用Validation.Error事件和计数器解决了此问题
<my:SomeUserControl my:ValidationScope.Errors="{Binding MyViewModel.Errors}" />