2017-08-23 5 views
1

単一バインディングで複数の検証規則を使用できますか? XAMLのみを使用してTextBoxを検証しようとしていますが、BindingGroupは動作していないようです。単一バインディングの複数の検証規則

<TextBox> 
    <TextBox.Text> 
     <Binding Path="Title" UpdateSourceTrigger="PropertyChanged"/> 
    </TextBox.Text> 
    <TextBox.BindingGroup> 
     <BindingGroup NotifyOnValidationError="True"> 
      <BindingGroup.ValidationRules> 
       <rule:CantBeEmpty ValidatesOnTargetUpdated="True" /> 
       <rule:CantBeMoreThanXCharacters 
        CharacterLimit="30" 
        ValidatesOnTargetUpdated="True" /> 
      <BindingGroup.ValidationRules/> 
     </BindingGroup> 
    </TextBox.BindingGroup> 
</TextBox> 

rule名前空間がxmlns:rule="clr-namespace:MyApp.Views.ValidationRules" これらのルールは、標準の構文に従う参照:

public class CantBeEmpty : ValidationRule { 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) { 
     [...] 
    } 
} 

答えて

3

あなたはバインディングに検証ルールを追加しようとしなかった?:

をここで

は私のXAMLです
<TextBox> 
    <TextBox.Text> 
     <Binding Path="Title" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <rule:CantBeEmpty ValidatesOnTargetUpdated="True" /> 
       <rule:CantBeMoreThanXCharacters CharacterLimit="30" ValidatesOnTargetUpdated="True" /> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 
+2

これは正解です。私の質問は、BindingGroupが何をしているのかという誤解が原因です。 MSDNから: _A BindingGroupは、複数のバインディング間の関係を作成します。このバインディングは、検証および更新が可能です。この場合、検証する必要があるフィールドは1つだけなので、実際にはBindingGroupは必要ありません。 'BindingGroup'は、郵便番号と州の住所、2つのパスワードフィールドなど、複数のフィールドを一緒に検証する必要がある場合に便利でした。 – Queder

関連する問題