2009-04-22 52 views
9

每隔一段時間我都會發現我的應用程序意外斷開了數據綁定。通過重命名一個屬性,而不是在XAML中重命名它,或者由於某種原因拋出異常的屬性。如何傳播WPF數據綁定期間發生的錯誤和異常?

默認情況下會將數據綁定錯誤記錄到調試輸出中,並且引發的異常會被捕獲並被抑制。

是否有一種簡單的方法在調試輸出記錄後引發異常?

我希望儘快知道數據綁定是否被破壞(理想情況下是在自動化測試中進行檢測),並且不會冒着被人忽略的可能性。

回答

11

經過一番拖延後,我終於開始編碼解決我的原始問題。

我的解決方案使用自定義TraceListener(最初由John提出),該自定義日誌記錄到輸出窗口。當出現錯誤時,輸出窗口會自動顯示併購買到前臺。

這裏是我的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; 

PresentationTraceSources也在System.Diagnostics定義。

有關跟蹤源的更多信息,請參閱Mike Hillberg的blog

Bea Stollnitz在她的blog上有一些有用的信息。

2

看看this blog article這可能有助於解決此問題。

+0

究竟是什麼,我會公佈,但我不記得的鏈接... – Benjol 2009-04-22 13:36:58

+0

這是有關調試與數據綁定問題的好文章。但是,這取決於你是否已經在第一個地方發現了問題?這不是我之後的答案。我想要的(如果可能的話)是如何使數據綁定問題更加突出的一個簡明說明。 – 2009-04-23 08:22:52

0

我實現了非常相似的接受的答案的解決方案:

  1. 派生一個TraceListener拋出,而不是記錄
  2. 補充說,監聽到PresentationTraceSources.DataBindingSource

請參閱complete solution on GitHub,它包括演示應用程序和單元測試項目。

Exception in Visual Studio