3

UIで値が切り替えられたときに、対応するプロパティセッターによってスローされた例外を食べているように見えるデータバインドされたWPFチェックボックスコントロールがあります。BindingインスタンスにExceptionValidationRuleを指定すると、これが発生する可能性があることはわかっていますが、BindingインスタンスのValidationRulesのカウントがゼロであることを再確認しました。また、呼び出しスタックで例外ハンドラーが介在していないかどうかを確認しましたが、存在しません。それでも、スローされた例外が一番上にバブルして、アプリでクラッシュが発生することはありません。

同じUIのボタンクリックハンドラーから例外をスローすると、例外が発生し、アプリケーションがクラッシュして、ある種のグローバル例外ハンドラーが除外されます。

何か案は?

ありがとう!

4

2 に答える 2

3

itowlsonの答えに追加するために、BindingクラスはUpdateSourceExceptionFilterプロパティを提供します。これにより、ソースの更新で例外が発生したときに実行されるロジックを提供できます。これはExceptionValidationRuleValidationErrorクラスと組み合わせて使用​​され、更新が失敗したときにを追加する以外のことを行うことができます。

于 2009-04-28T07:22:41.540 に答える
2

いいえ、これは予想される動作です。WPFデータバインディングインフラストラクチャは、バインディングターゲットからソースに値を保存することによって発生する例外をキャッチします。これは、アプリが保存操作の周りに例外ハンドラーを設定する方法がないためだと思います(アプリコードからではなくWPFコードから呼び出されるため)。したがって、WPFがこれを行わなかった場合、アプリは例外を処理するチャンス。

(対照的に、ボタンクリックハンドラーでは、コードを記述ているため、例外を処理する機会があります。したがって、WPFは、例外を処理しない場合は、例外を伝播させても問題ないと考えています。)

于 2009-04-27T23:10:46.980 に答える