将WPF验证集成到MVVM中

| 我有一些ValidationRules可以正常工作。我只是想知道将其与ViewModel集成的最佳方法是什么。 我有一个(过于简单的)方法(HasAnyErrors),该方法遍历控制树以检查错误,但是我不确定如何将这些结果公开给ViewModel。换句话说,如果我的ICommand仅在没有验证错误的情况下可以执行,该怎么办? 我能想到的最好的办法就是处理按钮的click事件,然后在没有错误的情况下手动调用ViewModel的命令。
    private void Button_Click_RunCommand(object sender, RoutedEventArgs e) {
        if (this.HasAnyErrors())
            return;
        (this.DataContext as SomeViewModel).SomeCommand.Execute(null);
    }
这不是最优雅的解决方案。但它似乎起作用。有没有更优雅的解决方案? 打破 为了完整起见,这里提供了验证方法(不久之后,大多数将是扩展方法)。它们(看起来)工作正常,但我敢肯定至少有人会怀疑它们的外观。
    bool HasAnyErrors() {
        List<string> errors = new List<string>();
        GetErrors(this, errors);
        return errors.Any();
    }

    void GetErrors(DependencyObject obj, List<string> errors) {
        foreach (UIElement child in LogicalTreeHelper.GetChildren(obj).OfType<UIElement>()) {
            if (child is TextBox)
                AddErrorIfExists(child as UIElement, errors);
            GetErrors(child, errors);
        }
    }

    private void AddErrorIfExists(UIElement element, List<string> errors) {
        if (Validation.GetHasError(element))
            errors.Add(Validation.GetErrors(element)[0].ErrorContent.ToString());
    }
    
已邀请:
        大概可以确定它们是否是针对视图模型本身的任何验证方法,而不是使用
Validation.GetErrors()
-如果要实现
IDataErrorInfo
,则可能会更简单。 如果是这种情况,您可以在按钮绑定到的命令的“ 4”方法中考虑视图模型的验证状态。     
        您可能对WPF应用程序框架(WAF)的BookLibrary示例应用程序感兴趣。 BookView.xaml.cs类显示如何将WPF验证状态与基础ViewModel同步。 在示例中,它用于解析错误。在这种具体情况下,当用户在“页面”文本框中输入\'abc \'时,将发生解析错误。页面绑定到一个整数值,因此无法解析\'abc \'。     

要回复问题请先登录注册