XAML 資料繫結診斷
處理 XAML 專案的開發人員通常必須偵測並解決其應用程式中的 XAML 資料繫結失敗。 現在 Visual Studio 2019 16.8 版或更新版本內有工具,Visual Studio 2022 可協助您在偵錯應用程式時尋找這些惱人的資料繫結失敗。 常見繫結失敗的範例如下:
- 繫結至不存在的屬性名稱:
{Binding Wrong.Name}
- 繫結至錯誤類型的值,例如需要列舉時繫結至布林值:
Visibility="{Binding IsVisible}"
由於這些繫結是使用反映在執行階段計算,因此 XAML 編輯器不一定能夠追捕它們,且您的組建仍會成功。 失敗只會在執行階段發生。
下列文章會說明 XAML 資料繫結:
- 針對 WPF:資料繫結概觀 - WPF .NET
- 針對 UWP:資料繫結概觀 - UWP 應用程式
- 針對 Xamarin.Forms:Xamarin.Forms 資料繫結 - Xamarin
繫結失敗一律會寫入 Visual Studio 中的偵錯輸出視窗。 但這很容易錯過偵錯輸出內的繫結失敗,因為包含其他偵錯資訊,使繫結失敗無法從檢視中捲動。 以下是偵錯輸出視窗內 WPF 繫結失敗的範例:
繫結失敗可能是視窗頂端的數百行,且文字不會確切地告訴您哪個繫結髮生失敗,因此您需要思考並進行搜尋。
現在,使用 XAML 繫結失敗工具視窗,您可以清楚地看到哪些繫結失敗,以及每個失敗的相關資料,例如 XAML 內的檔案位置。 此外,藉由搜尋、排序甚至開啟焦點設定於失敗繫結的 XAML 編輯器,有許多實用的功能可用來調查失敗。
按兩下這些資料列會開啟繫結的來源 XAML,如下圖所示:
XAML 繫結失敗工具視窗
XAML 繫結失敗工具視窗可在偵錯期間使用。 若要開啟它,請移至 [偵錯]>[Windows]>[XAML 繫結失敗]。
或者,選取應用程式工具列中的 [繫結失敗] 按鈕。 圖示旁的數字會顯示工具視窗中顯示多少個繫結失敗。
當工具視窗中沒有繫結失敗時,圖示會顯示為灰色,且旁邊沒有數字。 執行應用程式時,這會很有幫助。 如果您看到圖示變成紅色且帶有數字,請按一下圖示以快速跳至工具視窗,以查看發生哪些繫結失敗。 不需要持續留意 Visual Studio 工具視窗。 當繫結失敗時,圖示會立即告訴您。
以下是 XAML 繫結失敗工具視窗所有元件的描述。
- 頂端的工具列包含各種按鈕,如下所示:
- 清除失敗的清單:如果您要在應用程式中顯示新頁面,且想要查看是否有任何繫結失敗出現,這會很有用。 當您啟動新的偵錯工作階段時,系統會自動清除清單。
- 刪除選取的資料列:如果失敗已修正或不相關,您可以從清單中刪除它。 如果繫結再次失敗,已刪除的資料列將會再次顯示。
- 清除所有篩選:如果清單中有任何篩選條件,例如搜尋文字,則此按鈕會清除它們並顯示完整清單。
- 合併重複項目:當相同繫結位於項目範本內時,通常會在資料列中失敗多次。 選取 [合併重複項目] 按鈕時 (其周圍有外框),則所有重複的失敗都會顯示為單一資料列。 [計數] 資料行會顯示失敗發生的次數。
- 右上角的 [搜尋繫結失敗] 方塊可讓您將失敗篩選為僅包含特定文字的失敗。
- 資料表資料行會依序顯示:
- 以滑鼠右鍵按一下資料列或多個選取的資料列會顯示捷徑功能表,並顯示/隱藏資料行或將其分組的標準選項。 其他選項如下所示:
- 將所有文字從資料列複製,或只將單一資料行複製到剪貼簿。
- [複製原始錯誤] 將會複製出現在偵錯輸出視窗中的文字。
- [檢視來源] 將會針對一個選取的資料列移至 XAML 中的繫結來源。
- [重設資料行] 將會復原資料行可見度和排序的所有變更,讓您快速返回原先顯示的內容。
若要排序清單,請按一下任何資料行標頭。 若要以另一個資料行來重新排序,請按住 Shift 鍵,然後按一下其他的資料行標頭。 若要選取要顯示和隱藏的資料行,請從捷徑功能表中選擇 [顯示行]。 若要變更已顯示之資料行的順序,請將任一資料行標頭拖曳到左邊或右邊。
按兩下資料列或按 Enter 瀏覽至來源之後,您可以按 F8 或 Shift+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 熱重新載入選項,才能瀏覽至來源以運作。 此選項位於 [工具]>[選項]>[偵錯] 對話方塊中:
瀏覽至來源僅適用於 XAML 原始程式檔中定義的繫結,而不是透過程式碼建立的繫結。 您可以清楚地看到哪些資料列支援瀏覽至來源。 如果第二個資料行中沒有括弧圖示,則不支援瀏覽至來源,例如在下列螢幕擷取畫面中反白顯示的資料列:
針對 .NET Framework 中的 WPF,資料繫結失敗必須顯示在 [XAML 繫結失敗] 窗格的偵錯輸出中,才能偵測並顯示它們。 此選項位於 [工具]>[選項]>[偵錯]>[輸出視窗]>[WPF 追蹤設定] 對話方塊中。 如果設定為 [關閉] 或 [重大],則不會將資料繫結錯誤寫入偵錯輸出,而且無法偵測到。 在 .NET 5、.NET 6 和更新版本中使用 WPF 時,資料繫結輸出設定不會影響失敗清單。