C# 如何在WPF中有选择地验证表单?

C# 如何在WPF中有选择地验证表单?,c#,.net,wpf,validation,C#,.net,Wpf,Validation,我目前正在使用应用程序中列出的验证代码。我想有选择地验证一个页面。我的意思是:我有一个表单,它是附加了验证规则的数据库。我还有一个复选框,当选中时,它会禁用和清除几个绑定文本框的值。是否可以在这些文本框上设置属性,以告知验证引擎在验证时不要包含这些属性?可能的话,您可以使用触发器来切换绑定。这意味着Setter-s将使用另一个具有不同验证规则的绑定重新绑定属性 但是,只有当所有这些验证规则都在ControlTemplate或DataTemplate中时,这才有效。可能是您为Validator类编

我目前正在使用应用程序中列出的验证代码。我想有选择地验证一个页面。我的意思是:我有一个表单,它是附加了验证规则的数据库。我还有一个复选框,当选中时,它会禁用和清除几个绑定文本框的值。是否可以在这些文本框上设置属性,以告知验证引擎在验证时不要包含这些属性?

可能的话,您可以使用触发器来切换绑定。这意味着Setter-s将使用另一个具有不同验证规则的绑定重新绑定属性


但是,只有当所有这些验证规则都在ControlTemplate或DataTemplate中时,这才有效。

可能是您为Validator类编写了一个附加属性,并在IsValid方法中首先检查了它

static class Validator
{
    public static readonly DependencyProperty SkipValidationProperty =
        DependencyProperty.RegisterAttached("SkipValidation", typeof(bool), typeof(Validator),
        new UIPropertyMetadata(false));
    public static bool GetSkipValidation(DependencyObject obj)
    {
        return (bool)obj.GetValue(SkipValidationProperty);
    }
    public static void SetSkipValidation(DependencyObject obj, bool value)
    {
        obj.SetValue(SkipValidationProperty, value);
    }


    public static bool IsValid(DependencyObject parent)
    {
        if (Validator.GetSkipValidation(parent)) return true;
       //Rest of the validation code
    }


}
然后你可以做一些简单的事情,比如:

<StackPanel>
 <TextBox x:Name="txt" local:Validator.SkipValidation="{Binding IsChecked, ElementName=cbx}" />
 <CheckBox x:Name="cbx" >Skip Validate?</CheckBox>        
</StackPanel>

跳过验证?