プロパティの更新後にデータバインドされたオブジェクトに対して検証を実行する
-
09-06-2019 - |
質問
を実装するオブジェクトにデータバインドされたコントロールを備えた基本的なフォームがあります。 INotifyPropertyChanged インターフェース。いくつかのプロパティに検証を追加したいのですが、実装まではやりたくないです。 IDataErrorInfo いくつかのプロパティを検証するためです。
検証を実行し、オブジェクト内でエラー メッセージ (該当する場合) を返す関数を作成しました。私がやりたいのは、オブジェクトの関連するプロパティが変更されたときにフォームからこれらの関数を呼び出し、 エラープロバイダー 検証関数から返されたエラー メッセージをフォーム内のコントロールに表示します。
イベント ハンドラーを Validating イベントと LostFocus イベントに接続しようとしましたが、これらはオブジェクトが更新される前に起動するようで、そのため正しいデータが検証されていません。正しいデータに対して検証が実行されるのは、テキストボックスから離れて、テキストボックスに戻り、再び離れるときにのみです。
オブジェクトのプロパティが更新された後にこれらの検証関数を呼び出せるようにフックできる別のイベントはありますか?それとも単に実装したほうが良いのでしょうか? IDataErrorInfo インターフェース?
解決
何が問題なのか正確にはわかりませんが、コントロールがフォーカスを失うまでプロパティを設定できないと言っているのでしょうか?
その場合は、バインディングを更新するように設定する必要があります OnPropertyChanged
の代わりに OnValidation
.
バインド先 OnPropertyChanged
バインディングがすぐに更新されることを意味しますが、 OnValidation
検証がトリガーされたとき (ほとんどのコントロールではフォーカスを失ったとき) にのみ、基礎となるオブジェクトを更新します。
他のヒント
Cameron の投稿の助けを借りて問題の解決策を見つけたと思います。OnPropertyChanged を更新するようにバインディングを変更しました。イベント ハンドラーを LostFocus イベントに接続すると、オブジェクトに以前保持されていた値ではなく、テキスト ボックスの「新しい」値に対して検証が実行されます。