XAML 資料繫結診斷

處理 XAML 專案的開發人員通常必須偵測並解決其應用程式中的 XAML 資料繫結失敗。 現在 Visual Studio 2019 16.8 版或更新版本內有工具,Visual Studio 2022 可協助您在偵錯應用程式時尋找這些惱人的資料繫結失敗。 常見繫結失敗的範例如下:

  • 繫結至不存在的屬性名稱:{Binding Wrong.Name}
  • 繫結至錯誤類型的值,例如需要列舉時繫結至布林值:Visibility="{Binding IsVisible}"

由於這些繫結是使用反映在執行階段計算,因此 XAML 編輯器不一定能夠追捕它們,且您的組建仍會成功。 失敗只會在執行階段發生。

下列文章會說明 XAML 資料繫結:

繫結失敗一律會寫入 Visual Studio 中的偵錯輸出視窗。 但這很容易錯過偵錯輸出內的繫結失敗,因為包含其他偵錯資訊,使繫結失敗無法從檢視中捲動。 以下是偵錯輸出視窗內 WPF 繫結失敗的範例:

Screenshot of the output window containing a binding failure.

繫結失敗可能是視窗頂端的數百行,且文字不會確切地告訴您哪個繫結髮生失敗,因此您需要思考並進行搜尋。

現在,使用 XAML 繫結失敗工具視窗,您可以清楚地看到哪些繫結失敗,以及每個失敗的相關資料,例如 XAML 內的檔案位置。 此外,藉由搜尋、排序甚至開啟焦點設定於失敗繫結的 XAML 編輯器,有許多實用的功能可用來調查失敗。

Screenshot of the XAML Binding Failures tool window.

按兩下這些資料列會開啟繫結的來源 XAML,如下圖所示:

Screenshot of example bindings in the XAML editor.

XAML 繫結失敗工具視窗

XAML 繫結失敗工具視窗可在偵錯期間使用。 若要開啟它,請移至 [偵錯]>[Windows]>[XAML 繫結失敗]

Screenshot of the XAML Binding Failures option in the Debug menu.

或者,選取應用程式工具列中的 [繫結失敗] 按鈕。 圖示旁的數字會顯示工具視窗中顯示多少個繫結失敗。

Screenshot of the in-app toolbar showing the binding failures button.

當工具視窗中沒有繫結失敗時,圖示會顯示為灰色,且旁邊沒有數字。 執行應用程式時,這會很有幫助。 如果您看到圖示變成紅色且帶有數字,請按一下圖示以快速跳至工具視窗,以查看發生哪些繫結失敗。 不需要持續留意 Visual Studio 工具視窗。 當繫結失敗時,圖示會立即告訴您。

Screenshot of the in-app toolbar showing the binding failures button with no failures.

類似的圖示也會出現在 [即時視覺化樹狀結構] 工具視窗中。

Screenshot of the binding failures button within the Live Visual Tree tool window.

以下是 XAML 繫結失敗工具視窗所有元件的描述。

Screenshot of XAML Binding Failures tool window.

  • 頂端的工具列包含各種按鈕,如下所示:
    • 清除失敗的清單:如果您要在應用程式中顯示新頁面,且想要查看是否有任何繫結失敗出現,這會很有用。 當您啟動新的偵錯工作階段時,系統會自動清除清單。
    • 刪除選取的資料列:如果失敗已修正或不相關,您可以從清單中刪除它。 如果繫結再次失敗,已刪除的資料列將會再次顯示。
    • 清除所有篩選:如果清單中有任何篩選條件,例如搜尋文字,則此按鈕會清除它們並顯示完整清單。
    • 合併重複項目:當相同繫結位於項目範本內時,通常會在資料列中失敗多次。 選取 [合併重複項目] 按鈕時 (其周圍有外框),則所有重複的失敗都會顯示為單一資料列。 [計數] 資料行會顯示失敗發生的次數。
  • 右上角的 [搜尋繫結失敗] 方塊可讓您將失敗篩選為僅包含特定文字的失敗。
  • 資料表資料行會依序顯示:
    • 圖示,顯示資料列是否為錯誤或警告。
    • 如果支援在 XAML 中瀏覽至失敗的 {Binding},則顯示括弧 <> 的圖示。 請參閱支援的平台一節。
    • 資料內容:這是繫結來源物件的類型名稱
    • 繫結路徑:這是繫結的屬性路徑
    • 目標:這是將用來設定繫結值的類型和屬性名稱。
    • 目標類型:這是繫結目標屬性的預期類型。
    • 描述:此資料行包含繫結完全失敗項目的詳細資訊。
    • 檔案專案:如果已知,這是定義繫結所在 XAML 中的位置。
  • 以滑鼠右鍵按一下資料列或多個選取的資料列會顯示捷徑功能表,並顯示/隱藏資料行或將其分組的標準選項。 其他選項如下所示:
    • 將所有文字從資料列複製,或只將單一資料行複製到剪貼簿。
    • [複製原始錯誤] 將會複製出現在偵錯輸出視窗中的文字。
    • [檢視來源] 將會針對一個選取的資料列移至 XAML 中的繫結來源。
    • [重設資料行] 將會復原資料行可見度和排序的所有變更,讓您快速返回原先顯示的內容。

若要排序清單,請按一下任何資料行標頭。 若要以另一個資料行來重新排序,請按住 Shift 鍵,然後按一下其他的資料行標頭。 若要選取要顯示和隱藏的資料行,請從捷徑功能表中選擇 [顯示行]。 若要變更已顯示之資料行的順序,請將任一資料行標頭拖曳到左邊或右邊。

按兩下資料列或按 Enter 瀏覽至來源之後,您可以按 F8Shift+F8 來向下或向上移動繫結失敗清單。 這就像 Visual Studio 中顯示清單的其他窗格一樣。

支援的平台

如果繫結失敗寫入至偵錯輸出,則支援大部分的 XAML 平台。 某些平台會提供額外的來源資訊給偵錯工具,以允許瀏覽至來源。

平台 支援 瀏覽至支援的來源
WPF .NET Framework No
WPF .NET 5.0 RC2+ Yes Yes
UWP No
WinUI3 桌面 No
MAUI (Multi-Platform App UI) No
Xamarin 4.5.0.266-pre3+ Yes Yes
Xamarin (4.5.0.266-pre3 之前) No No

必須在 Visual Studio 中啟用 XAML 熱重新載入選項,才能瀏覽至來源以運作。 此選項位於 [工具]>[選項]>[偵錯] 對話方塊中:

Screenshot of the XAML Hot Reload options dialog.

瀏覽至來源僅適用於 XAML 原始程式檔中定義的繫結,而不是透過程式碼建立的繫結。 您可以清楚地看到哪些資料列支援瀏覽至來源。 如果第二個資料行中沒有括弧圖示,則不支援瀏覽至來源,例如在下列螢幕擷取畫面中反白顯示的資料列:

Screenshot showing a XAML binding failure without a source location.

針對 .NET Framework 中的 WPF,資料繫結失敗必須顯示在 [XAML 繫結失敗] 窗格的偵錯輸出中,才能偵測並顯示它們。 此選項位於 [工具]>[選項]>[偵錯]>[輸出視窗]>[WPF 追蹤設定] 對話方塊中。 如果設定為 [關閉] 或 [重大],則不會將資料繫結錯誤寫入偵錯輸出,而且無法偵測到。 在 .NET 5、.NET 6 和更新版本中使用 WPF 時,資料繫結輸出設定不會影響失敗清單。

Screenshot of WPF output options.