2011-02-01 15 views
8

データバインドされたプロパティゲッター(およびセッターによってスローされる例外をキャッチするアプリケーション全体のメソッドを探していますが、それほど問題はありません。これらのイベントのWPFデータバインディング:プロパティゲッターによってスローされた例外をキャッチ

なしゲッターによってスローされた例外をキャッチしません:

AppDomain.CurrentDomain.UnhandledException 
Application.Current.DispatcherUnhandledException 
Application.Current.Dispatcher.UnhandledException 

もう一つのアイデアは、this threadで説明したようにUpdateSourceExceptionFilterでカスタムバインディング・クラスを使用することです。残念ながら、このメソッドはgetterではなくプロパティセッターで例外をキャッチします。

私が見た最後のオプションは、PresentationTraceSourcesトレースリスナを使用することです:

PresentationTraceSources.Refresh(); 
PresentationTraceSources.DataBindingSource.Listeners.Add(new PresentationLoggingTraceListener()); 
PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; 

この方法は、私が欲しいものを基本的にやるように見えるん。残念なことに、それは私に文字列を与え、例外ではなく、実際のエラーを得るために少しだけ構文解析をしなければならないという意味です。

TraceListenerメソッドはおそらく最後には機能しますが、ちょっとハックしたようです。私が紛失しているオプションが他にありますか、TraceListenerにかなり拘束されていますか?

+2

私はこの回答を見たいと思います。 –

答えて

1

私は、この問題に対するアスペクト指向プログラミング(AOP)アプローチを提案します。これはコンパイル時にコードを挿入することができます。コンパイル時には、あなたの望みどおりのもの、この場合はtry/catchとloggingを使ってゲッターをラップします。私が取り組んだのは、ポストシャープhttp://www.sharpcrafters.comの無料版PostSharp Laosだけです。

私はこれが良い例だと信じています。http://www.richard-banks.org/2009/02/aspect-oriented-programming.html、その例では、彼は自動的にNotifyPropertyChangedを呼び出すことができます。他にもいくつかのAOPプロジェクトがありますが、私はそれらを使っていません。良いリストはhttp://www.bodden.de/tools/aop-dot-netです。私は織りに基づいたアプローチを提案します。

+0

コメントありがとうございます。これは私がこれまで見てきた最良の提案だと思う。 –

+0

@MartyDillこれを実用的なソリューションに変換できましたか?あなたがこれをあなたの経験を投稿することができれば素晴らしいでしょう。 – akjoshi