2012-05-09 12 views
0

私は検証のさまざまな方法を試しています。新しいINotifyDataErrorInfoインターフェイスに問題があります。例外を使用した検証とIDataErrorInfoと新しいINotifyDataErrorInfo

たとえば、10文字しか受け付けないバインドされたテキストボックスに書き込む場合。私は11文字を書いてタブアウトする。検証では、テキストボックスの赤などをマークします。今、私はこのバインディングのソースにこの無効な値を書きたくないのですが、私がこれをやっていないなら、すぐにテキストボックスの値を最後の有効な値。それは、たとえエラーがあってもバインディングがUpdateTargetをバインドしているかのようです。

ValidatesOnExceptionsを使用し、setterで例外をスローすると、私は後の動作を取得します。 setterで例外がスローされた場合、バインディングはソースからの値を更新しません。これにより、テキストボックスに無効な値が残され、有効にするためにそれを使用できるようになります。私は、これは基本的なオブジェクトに無効な値を格納するよりもはるかに良いと思う。

IDataErrorInfoと新しいINotifyDataErrorInfoがこのように動作し、エラーがあってもソースからターゲットを更新するのはなぜですか? ValidatesOnExceptionsのように動作させることはできますか?

私はあなたがそれをソースにコミットされた前の値を検証する必要がある場合は、カスタム検証ルールセットを作成する必要があります

答えて

2

...なぜなら、このような非同期検証などの他の機能をINotifyDataErrorInfoを必要としますValidationStepをRawProposedValueまたはConvertedProposedValueに設定します。

詳細については、Validation ProcessおよびValidationStepのドキュメントを参照してください。

関連する問題