2009-04-17 70 views
5

我想要一個簡單的方法來確保我在xaml文件中聲明的所有綁定都轉到了真實屬性。更好的是,我想在單元測試中實例化我的wpf窗口並調用一個方法來確保綁定是正確的。我如何驗證wpf綁定將轉爲真實屬性?

不幸的是,如果我有什麼問題,wpf甚至不會拋出異常。這讓我很難在質量檢查階段「發現」問題。

有誰知道一種方法,我可以更好地驗證我的綁定?

回答

4

次優的方法是通過爲所有依賴屬性的可視化樹進行搜索,然後檢查:

var bindingExpression = BindingOperations.GetBindingExpressionBase(dependencyObject, dependencyProperty); 

if (bindingExpression != null) 
{ 
    var status = bindingExpression.Status; 
} 

如果statusUnattached則表達式沒有解決。

當然,您不希望在生產應用程序中這樣做,但它在調試或集成測試場景中可能有意義。

1

數據綁定錯誤顯示在Visual Studio輸出窗口中。例如,假設我想將一個TextBlock綁定到一個Window的Title屬性,但是我錯誤地輸入了「Title」作爲「Ritle」。我將在輸出窗口中看到這一點:

System.Windows.Data Error: 39 : BindingExpression path error: 'Ritle' property not found on 'object' ''MessageWindow' (Name='Window')'. BindingExpression:Path=Ritle; DataItem='MessageWindow' (Name='Window'); target element is 'TextBlock' (Name='WindowTitle'); target property is 'Text' (type 'String')

你可以對這些信息是如何通過跟蹤源報道更多的控制。 Bea Stollnitz的This article更詳細地描述了這一點。

+0

我聽到你在說什麼,但那並沒有真正驗證你的綁定。它只是提供了開發人員必須仔細檢查的調試信息。我認爲嘗試編寫一個TraceListener,當它「發現」一個綁定錯誤時拋出它會相當脆弱,因爲它必須解析可能隨着微軟的奇想而改變的消息。雖然可能比沒有好。 – 2009-04-17 15:35:22