2009-05-04 53 views
2

我目前在應用程序中使用了列出的驗證碼here。我想選擇性地驗證一個頁面。我的意思是這樣的:我有一個附有驗證規則的數據綁定表單。我也有一個複選框,當選中時,禁用和清除幾個綁定文本框的值。是否有我可以在這些文本框上設置的屬性來告訴驗證引擎在驗證時不要包含這些屬性?如何選擇性驗證WPF中的表單?

回答

2

也許如果你爲你的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> 
0

可能的是,您可能會觸發切換綁定的觸發器。這意味着Setter-s將使用具有不同驗證規則的另一個綁定重新綁定屬性。

但是,如果所有這些驗證規則都在ControlTemplate或DataTemplate中,那麼只有(?)纔有效。