2

INotifyPropertyChangedインターフェイスを実装するオブジェクトにデータ バインドされたコントロールを含む基本的なフォームがあります。いくつかのプロパティに検証を追加したいのですが、いくつかのプロパティを検証するためにIDataErrorInfoを実装したくありません。

オブジェクトで検証を実行し、エラー メッセージ (該当する場合) を返す関数を作成しました。私がやりたいことは、オブジェクトの関連するプロパティが変更されたときにフォームからこれらの関数を呼び出し、検証関数から返されたエラー メッセージを使用してフォームにErrorProviderコントロールをセットアップすることです。

イベント ハンドラーを Validating および LostFocus イベントに接続しようとしましたが、これらはオブジェクトが更新される前に発生するように見えるため、正しいデータを検証していません。テキストボックスを離れたときにのみ、正しいデータに対して検証が実行されます。

オブジェクトのプロパティが更新された後にこれらの検証関数を呼び出すことができるようにフックできる別のイベントはありますか? それとも、IDataErrorInfoインターフェイスを実装したほうがよいのでしょうか?

4

2 に答える 2

1

キャメロンの投稿の助けを借りて、問題の解決策を見つけたと思います。OnPropertyChanged を更新するようにバインディングを変更しました。イベント ハンドラーを LostFocus イベントに関連付けると、以前にオブジェクトに保持されていた値ではなく、テキスト ボックスの「新しい」値に対して検証が実行されます。

于 2008-09-15T13:32:31.450 に答える
1

コントロールがフォーカスを失うまでプロパティを設定できないということですか?

その場合は、バインディングをOnPropertyChangedの代わりにupdate に設定する必要がありますOnValidation

バインディングとOnPropertyChangedは、バインディングがすぐに更新されることを意味しOnValidationますが、検証がトリガーされたときにのみ基になるオブジェクトを更新します (ほとんどのコントロールでは、フォーカスが失われたときです)。

于 2008-09-15T13:23:02.440 に答える