C# 如何处理WPF验证和MVVM?
我在MVVM模型中有一个WPF页面(作为我的视图)。视图是一个带有许多文本框的输入表单。我有一个自定义的ValidationRule,用于验证每个文本框并相应地显示工具提示警告。但是,我只希望在所有验证器通过时启用“提交”按钮。现在,我的“提交”按钮的IsEnabled根据其他条件绑定到DataContext。当我的IsEnabled已经像这样绑定时,如何添加“仅当所有验证器通过时才启用”的警告C# 如何处理WPF验证和MVVM?,c#,.net,wpf,validation,C#,.net,Wpf,Validation,我在MVVM模型中有一个WPF页面(作为我的视图)。视图是一个带有许多文本框的输入表单。我有一个自定义的ValidationRule,用于验证每个文本框并相应地显示工具提示警告。但是,我只希望在所有验证器通过时启用“提交”按钮。现在,我的“提交”按钮的IsEnabled根据其他条件绑定到DataContext。当我的IsEnabled已经像这样绑定时,如何添加“仅当所有验证器通过时才启用”的警告 IsEnabled="{Binding IsDataLoaded}" 您可以与所需的转换器一起使用
IsEnabled="{Binding IsDataLoaded}"
您可以与所需的转换器一起使用您可以与所需的转换器一起使用假设您将按钮绑定到命令,因此它仅在验证规则生效时返回true。假设您将按钮绑定到命令,因此,它仅在验证规则验证时返回true。您的提交按钮应绑定到
视图模型中的RelayCommand
,并且仅在this.isataloaded
和this.IsValid
时才将CanExecute()
设置为true
CommitCommand = new RelayCommand(
param => SaveChanges()
param => this.IsDataLoaded && this.IsValid
);
为了验证ViewModel是否有效,我建议使用您的提交按钮应该绑定到ViewModel
中的RelayCommand
,只需将CanExecute()
设置为true,前提是this.isataloaded
和this.IsValid
CommitCommand = new RelayCommand(
param => SaveChanges()
param => this.IsDataLoaded && this.IsValid
);
为了验证ViewModel是否有效,我建议使用它们绑定到命令,但验证规则是textbox绑定的一部分,datacontext如何知道验证器的状态?我更希望ViewModel知道数据的有效性,因此我不会将验证放在视图/绑定中。我同意Erno的观点,特别是如果您使用数据注释进行验证,它使验证变得如此简单,正如Erno所说,您的命令CanExecute方法可以考虑模型本身的有效性。它们绑定到命令,但验证规则是textbox绑定的一部分,datacontext如何知道验证器的状态?我更希望ViewModel知道数据的有效性,因此我不会将验证放在视图/绑定中。我同意Erno的观点,特别是如果您使用数据注释进行验证,它使验证变得如此简单,正如Erno所说,您的命令CanExecute方法可以考虑模型本身的有效性。