2009-05-04 12 views
2

私は現在、アプリケーションにhereと記載された検証コードを使用しています。私はページを選択的に検証したいと思います。私が意味することはこれです:私は検証ルールが添付されたデータバインドされたフォームを持っています。また、チェックすると、いくつかのバインドされたテキストボックスの値が無効になり、クリアされるチェックボックスがあります。これらのテキストボックスに設定可能なプロパティがあり、検証エンジンに検証時にこれらを含めないように指示しますか?WPFでフォームを選択的に検証するにはどうすればよいですか?

答えて

2

おそらく、Validatorクラスの添付プロパティを書き、IsValidメソッドの最初のものをチェックしたとします。

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

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 
    } 


} 

は、その後、あなたはのような単純な何かができます

0

おそらく、バインディングを切り替えるトリガーを持つ可能性があります。つまり、Setter-sは、異なる検証規則を持つ別のバインディングを使用してプロパティを再バインドします。

しかし、これらの検証規則がすべてControlTemplateまたはDataTemplateに含まれていれば、(?)しか動作しません。

関連する問題