Диагностика привязки данных 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". Чтобы открыть его, перейдите к разделу "Отладка>сбоев привязки XAML Для Windows".>

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.

  • Панель инструментов вверху содержит кнопки следующим образом:
    • Снимите список сбоев. Это полезно, если вы собираетесь отобразить новую страницу в приложении и хотите узнать, отображаются ли какие-либо сбои привязки. При запуске нового сеанса отладки список автоматически очищается.
    • Удаление выбранных строк: если сбой исправлен или не имеет значения, его можно удалить из списка. Удаленные строки будут отображаться снова, если привязка завершается ошибкой.
    • Снимите все фильтры: если в списке есть фильтры, например поиск текста, эта кнопка снимите их и отобразит полный список.
    • Объединение повторяющихся элементов: часто одна и та же привязка будет завершаться много раз в строке, когда она находится в шаблоне элемента. При выборе кнопки "Объединить дубликаты" (с контуром вокруг нее) все повторяющиеся сбои отображаются как одна строка. Столбец Count показывает, сколько раз произошел сбой.
  • Поле "Ошибки привязки поиска" в верхнем углу позволяет фильтровать ошибки только тем, которые содержат определенный текст.
  • Столбцы таблицы, упорядоченные, отображаются:
    • Значок, показывающий, является ли строка ошибкой или предупреждением.
    • Значок, показывающий угловые скобки <> , если переход к сбою {Binding} в XAML поддерживается. См. раздел "Поддерживаемые платформы ".
    • Контекст данных: это имя типа для исходного объекта привязки
    • Путь привязки: это путь к свойству для привязки
    • Целевой объект: это имя типа и свойства, в котором будет задано значение привязки.
    • Целевой тип: это ожидаемый тип целевого свойства привязки.
    • Описание. Этот столбец содержит дополнительные сведения о том, что именно не удалось выполнить привязку.
    • Файл, строка и проект: если известно, это расположение в XAML, в котором определена привязка.
  • Щелкнув правой кнопкой мыши строку или несколько выбранных строк, отобразится контекстное меню с стандартными параметрами для отображения или скрытия столбцов или группировки их. Ниже приведены другие варианты.
    • Скопируйте весь текст из строки или только одного столбца в буфер обмена.
    • Скопируйте исходную ошибку, скопируйте текст, появившийся в окне вывода отладки.
    • Просмотр источника будет переходить к источнику привязки в XAML для одной выбранной строки.
    • Сброс столбцов отменяет все изменения видимости и сортировки столбцов, что позволяет быстро вернуться к исходному отображению.

Для сортировки списка выберите любой заголовок столбца. Чтобы выполнить сортировку по дополнительному столбцу, удерживайте клавишу SHIFT и щелкните другой заголовок столбца. Чтобы выбрать отображаемые и скрываемые столбцы, щелкните команду Показать столбцы в контекстном меню. Чтобы изменить порядок, в котором отображаются столбцы, перетащите любой заголовок столбца влево или вправо.

Дважды щелкнув строку или нажав клавишу ВВОД , чтобы перейти к источнику, можно нажать клавишу F8 или SHIFT+F8 , чтобы перейти вниз или вверх по списку сбоев привязки. Это похоже на другие панели в Visual Studio, которые отображают список.

Поддерживаемые платформы

Большинство платформ XAML поддерживаются, если ошибки привязки записываются в отладочные выходные данные. Некоторые платформы предоставляют дополнительные исходные сведения отладчику, который позволяет переходить к источнику.

Платформа Поддерживается Переход к источнику, поддерживаемый
ПЛАТФОРМА .NET FRAMEWORK WPF Да Нет
WPF .NET 5.0 RC2+ Да Да
UWP Да Нет
Рабочий стол WinUI3 Да Нет
MAUI (пользовательский интерфейс мультиплатформенного приложения) Да Нет
Xamarin 4.5.0.266-pre3+ Да Да
Xamarin до 4.5.0.266-pre3 No No

Параметр XAML Горячая перезагрузка должен быть включен в Visual Studio для перехода к источнику для работы. Этот параметр находится в диалоговом окне отладки параметров>инструментов>:

Screenshot of the XAML Hot Reload options dialog.

Навигация по источнику работает только для привязок, определенных в исходных файлах XAML, а не в том случае, если они создаются с помощью кода. Вы можете четко увидеть, какие строки поддерживают переход к источнику. Если в втором столбце нет значка угловой скобки, то переход к источнику не поддерживается, например с выделенной строкой на следующем снимке экрана:

Screenshot showing a XAML binding failure without a source location.

Для WPF в платформа .NET Framework ошибки привязки данных должны отображаться в выходных данных отладки для области "Сбои привязки XAML" для обнаружения и отображения их. Этот параметр доступен в >диалоговом окне "Параметры>отладки>выходных данных>" wpf trace Параметры. Если параметр отключен или критически важен, ошибки привязки данных не записываются в отладочные выходные данные и не могут быть обнаружены. При использовании WPF в .NET 5, .NET 6 и последующем параметр выходных данных привязки данных не влияет на список сбоев.

Screenshot of WPF output options.