Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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
C# 如何处理WPF验证和MVVM?_C#_.net_Wpf_Validation - Fatal编程技术网

C# 如何处理WPF验证和MVVM?

C# 如何处理WPF验证和MVVM?,c#,.net,wpf,validation,C#,.net,Wpf,Validation,我在MVVM模型中有一个WPF页面(作为我的视图)。视图是一个带有许多文本框的输入表单。我有一个自定义的ValidationRule,用于验证每个文本框并相应地显示工具提示警告。但是,我只希望在所有验证器通过时启用“提交”按钮。现在,我的“提交”按钮的IsEnabled根据其他条件绑定到DataContext。当我的IsEnabled已经像这样绑定时,如何添加“仅当所有验证器通过时才启用”的警告 IsEnabled="{Binding IsDataLoaded}" 您可以与所需的转换器一起使用

我在MVVM模型中有一个WPF页面(作为我的视图)。视图是一个带有许多文本框的输入表单。我有一个自定义的ValidationRule,用于验证每个文本框并相应地显示工具提示警告。但是,我只希望在所有验证器通过时启用“提交”按钮。现在,我的“提交”按钮的IsEnabled根据其他条件绑定到DataContext。当我的IsEnabled已经像这样绑定时,如何添加“仅当所有验证器通过时才启用”的警告

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方法可以考虑模型本身的有效性。