2009-04-22 18 views
9

多くの場合、私は誤って自分のアプリケーションでデータのバインドを壊してしまっています。プロパティの名前を変更し、XAMLで名前を変更しないか、または何らかの理由で例外をスローするプロパティで行います。WPFデータバインディング中に発生するエラーと例外を伝播する方法はありますか?

デフォルトでは、データバインディングエラーがデバッグ出力に記録され、スローされた例外がキャッチされ、抑制されます。

デバッグ出力が記録された後に例外がスローされる簡単な方法はありますか?

私は(理想的には、自動テストでそれを拾う)データバインディングが壊れている場合は、できるだけ早く知りたいといないが、人間によってテストされるまで、それは気付かれないかもしれないという可能性を危険にさらします。

答えて

11

私は最終的に私の元の問題への解決策をコーディングすることを約束しました。

私のソリューションは、出力ウィンドウに記録します(もともとはジョンによって提案された)カスタムTraceListenerを使用しています。エラーが発生すると、出力ウィンドウが自動的に表示され、フォアグラウンドで購入されます。

は、ここに私のTraceListenerです:

public class ErrorLogTraceListener : TraceListener 
{ 
    public override void Write(string message) 
    { 
     ... 
    } 

    public override void WriteLine(string message) 
    { 
     ... 
    } 
} 

TraceListenerはたSystem.Diagnosticsで定義されています。

カスタムTraceListenerには、使用するシステムにフックする必要があります。これを行う公式の方法は、レジストリに何かを設定してから、App.configファイルを使用してTraceListenerを設定することです。

ErrorLogTraceListener listener = new ErrorLogTraceListener(); 
PresentationTraceSources.Refresh(); 

PresentationTraceSources.DataBindingSource.Listeners.Add(listener); 
PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; 

PresentationTraceSourcesSystem.Diagnosticsに定義されています。

しかし、私はプログラム的にこれを行うにははるかに簡単な方法があることがわかりました。トレースソースの詳細については

はマイクHillbergのblogを参照してください。

ビーStollnitzは彼女blog上のいくつかの有用な情報を持っています。

+1

デバッガが接続されているときにエラーが発生することがわかりました。デバッガが接続されていない場合、WPFは最初にエラーを出力しません。(?) 誰かがこれを経験していますか? – pauldoo

+1

詳細な調査では、デバッガが接続されたときに変更されるフラッシュ動作のみです。 'System.Diagnostics.Trace.AutoFlush = true; 'を使用して、私たちの問題を修正しました。 – pauldoo

+2

例:http://www.jasonbock.net/jb/Default.aspx?blog=entry.0f221e047de740ee90722b248933a28d – Thomas

2

この問題を回避するのに役立つthis blog articleをご覧ください。

+0

... – Benjol

+0

これは、データバインディングの問題をデバッグについて良い記事です。しかし、それはまず最初に問題を検出したことにかかっていますか?これは本当に私が後にした答えではありません。私が望むもの(可能な場合)は、最初にデータバインディングの問題をより際立たせる方法の簡潔な説明です。 –

+0

例外をスローするカスタムトレースリスナを作成することができます – John

0

は、私は受け入れ答えに非常によく似たソリューション実装:リスナーへPresentationTraceSources.DataBindingSource

complete solution on GitHubを参照してくださいすることを代わりにログ

  • 追加のスロー

    1. TraceListener派生し、それは、デモ・アプリケーション、単体テスト・プロジェクトなどがあります。私はリンクを思い出せなかった以外、私は、投稿しているだろうまさに

      Exception in Visual Studio

  • 関連する問題