さまざまな検証方法を試していますが、新しい INotifyDataErrorInfo インターフェイスに問題があります。
たとえば、10 文字しか受け付けないバインドされたテキスト ボックスに書き込む場合。11文字書いてタブアウト。検証が開始され、テキスト ボックスが赤くマークされます。このバインディングのソースにこの無効な値を書き留めたくはありませんが、これを行っていない場合は、すぐにテキスト ボックスの値が最後の有効な値。エラーが発生したにもかかわらず、バインディングがそのバインディングに対して UpdateTarget を実行するかのようです。
ValidatesOnExceptions を使用し、セッターで例外をスローすることで、私が求めている動作が得られます。セッターで例外がスローされた場合、バインディングはソースからの値を更新していません。これにより、テキストボックスに無効な値が残るため、有効にするために作業できます。これは、基になるオブジェクトに無効な値を格納するよりもはるかに優れていると思います。
問題は、なぜ IDataErrorInfo と新しい INotifyDataErrorInfo がこのように動作し、エラーが発生したにもかかわらず、ソースからターゲットを更新するのかということです。ValidatesOnExceptions のように動作させることはできますか?
非同期検証などの他の機能のために INotifyDataErrorInfo が必要です...