2010-10-26 56 views
28

WPF是一個很好的工具集,XAML數據綁定功能非常強大,但是我經常遇到難以解決的問題:在沒有錯誤發生時調試數據綁定失敗可能很困難。是否有一個很好的工具在運行時調試XAML的數據綁定行爲/錯誤?

例如,最近我不得不改變這樣的Style聲明:

<DataGrid.RowStyle> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding TestProperty}" Value="False"> 
       <Setter Property="DataGridRow.Background" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

進入這個:

<DataGrid.RowStyle> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.TestProperty}" Value="False"> 
       <Setter Property="DataGridRow.Background" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

爲了使受到影響的DataGridRow財產。在設計或運行時看到綁定到不同來源的含義會是非常有幫助的。

是否存在這樣的工具/技術?

回答

30

您可以使用PresentationTraceSources.TraceLevel附加的綁定屬性在運行期間獲取輸出中的詳細日誌記錄。

在你的情況下,它看起來就像這樣:

<DataGrid.RowStyle> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Value="False" Binding="{Binding DataContext.TestProperty, 
        RelativeSource={RelativeSource AncestorType=UserControl}, 
        PresentationTraceSources.TraceLevel=High}"> 
       <Setter Property="DataGridRow.Background" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 
+5

這絕對有幫助 - 接受!爲了完整起見,由於在運行時檢查視覺樹是一個相關的問題,我還想指出[Snoop](http://www.blois.us/Snoop/)給任何不知道它的魅力的人。 – 2010-10-29 15:48:26

+1

可以在CodePlex上找到最新版本的Snoop:http://snoopwpf.codeplex.com/ – 2010-10-29 19:25:13

+0

對我有幫助的是輸出窗口上正確的Tracelevel。選項>調試>輸出窗口>數據綁定。如下所示:http://karlshifflett.wordpress.com/2010/06/24/visual-studio-2010-wpf-trace-settings-default-is-incorrect – uli78 2014-12-03 10:04:59

3

如果您在Visual Studio調試器下運行您的應用程序,則會將綁定錯誤報告給輸出窗口。這些信息非常豐富,應該可以幫助你追蹤任何錯誤。

0

Visual Studio 2010中的另一個選項是在綁定上放置一個斷點。這可以通過點擊Binding關鍵字並按F9來設置斷點來輕鬆完成。 Binding關鍵字將以紅色突出顯示。如果突出顯示較大的文本塊,則可能是斷點在您正在使用的編輯器中不起作用。如果發生這種情況,請嘗試在解決方案資源管理器中右鍵單擊該文件,選擇「打開方式」並選擇「源代碼(文本)編輯器」。

當您在運行時命中斷點時,您可以使用Locals調試器窗口檢查它並查看它綁定的內容。

+4

這對Visual Studio 2010中的我不起作用:查看XAML文件時,Debug菜單中沒有出現任何斷點選項,並且按住F9並且在{{Binding ...]上光標不起作用。你能澄清你在做什麼(或許有一個截圖)來實現這一目標嗎? – 2013-02-01 17:39:34