ValidatesOnDataError は、ビュー モデルに対してビジネス ルールを検証するために使用され、バインディングが成功した場合にのみ検証されます。
ValidatesOnExceptions を ValidatesOnDataError と一緒に適用して、データ型の不一致のために wpf がバインドを実行できないシナリオを処理する必要があります。ビュー モデルで TextBox を Age (整数) プロパティにバインドするとします。
<TextBox Text="{Binding Age, ValidatesOnDataErrors=true, UpdateSourceTrigger=PropertyChanged}" />
ユーザーが年齢として数字ではなくアルファベットを入力して無効なエントリを入力した場合、xyz など、 wpfデータバインディングは値を無視します。
<TextBox Text="{Binding Age, ValidatesOnDataErrors=true, ValidatesOnExceptions="True", UpdateSourceTrigger=PropertyChanged}" />
ValidatesOnException は、ExceptionValidationRule を使用してバインド エラーにデフォルトの例外処理を使用します。上記の構文は、次の短い形式です。
<TextBox>
<TextBox.Text>
<Binding Path="Age" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
次の例では、ValidationRule から派生させて Validate メソッド NumericRule を実装することにより、ユーザー入力に対して検証する独自のルールを定義できます。
<TextBox.Text>
<Binding Path="Age" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<rules:NumericRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
検証ルールは一般的であり、ビジネスに結び付けられないようにする必要があります。後者は IDataErrorInfo および ValidatesOnDataError によって達成されるからです。
上記の構文は、私たちが持っている 1 行のバインド構文に比べてかなり厄介です。ValidationRule を添付プロパティとして実装することで、構文を改善することができます。ここで確認できます。