每隔一段時間我都會發現我的應用程序意外斷開了數據綁定。通過重命名一個屬性,而不是在XAML中重命名它,或者由於某種原因拋出異常的屬性。如何傳播WPF數據綁定期間發生的錯誤和異常?
默認情況下會將數據綁定錯誤記錄到調試輸出中,並且引發的異常會被捕獲並被抑制。
是否有一種簡單的方法在調試輸出記錄後引發異常?
我希望儘快知道數據綁定是否被破壞(理想情況下是在自動化測試中進行檢測),並且不會冒着被人忽略的可能性。
每隔一段時間我都會發現我的應用程序意外斷開了數據綁定。通過重命名一個屬性,而不是在XAML中重命名它,或者由於某種原因拋出異常的屬性。如何傳播WPF數據綁定期間發生的錯誤和異常?
默認情況下會將數據綁定錯誤記錄到調試輸出中,並且引發的異常會被捕獲並被抑制。
是否有一種簡單的方法在調試輸出記錄後引發異常?
我希望儘快知道數據綁定是否被破壞(理想情況下是在自動化測試中進行檢測),並且不會冒着被人忽略的可能性。
經過一番拖延後,我終於開始編碼解決我的原始問題。
我的解決方案使用自定義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上有一些有用的信息。
看看this blog article這可能有助於解決此問題。
我實現了非常相似的接受的答案的解決方案:
TraceListener
拋出,而不是記錄PresentationTraceSources.DataBindingSource
請參閱complete solution on GitHub,它包括演示應用程序和單元測試項目。
究竟是什麼,我會公佈,但我不記得的鏈接... – Benjol 2009-04-22 13:36:58
這是有關調試與數據綁定問題的好文章。但是,這取決於你是否已經在第一個地方發現了問題?這不是我之後的答案。我想要的(如果可能的話)是如何使數據綁定問題更加突出的一個簡明說明。 – 2009-04-23 08:22:52