Поделиться через


Диагностика привязки данных XAML

Разработчикам, работающим с проектами XAML, часто приходится обнаруживать и устранять сбои привязки данных XAML в своих приложениях. Теперь есть средства в Visual Studio 2019 версии 16.8 или более поздней и Visual Studio 2022, чтобы помочь найти эти раздражительные сбои привязки данных во время отладки приложения. Ниже приведены примеры распространенных сбоев привязки.

  • Привязка к имени свойства, которое не существует: {Binding Wrong.Name}
  • Привязка к значению неправильного типа, например привязка к логическому значению, когда требуется перечисление: Visibility="{Binding IsVisible}"

Так как эти привязки вычисляются во время выполнения с помощью отражения, редактор XAML не всегда может перехватывать их, и сборка по-прежнему будет выполнена успешно. Сбой происходит только во время выполнения.

Привязка данных XAML описана в следующих статьях:

Ошибки привязки всегда записываются в окно вывода отладки в Visual Studio. Но сбои привязки легко пропустить в выводе отладки, так как он содержит другие отладочные сведения, из-за которых они исчезают из поля зрения. Ниже приведен пример сбоя привязки WPF в отладочном окне:

снимок экрана окна вывода, содержащего сбой привязки.

Сбой привязки может находиться на сотни строк выше видимой части окна, и текст не указывает точно, какая именно привязка вызвала сбой, поэтому нужно обдумать это и выполнить поиск.

Теперь в окне средства "Сбои привязки XAML" можно четко увидеть, какие привязки завершились сбоем, а также соответствующие данные для каждого сбоя, например расположение файла в XAML. Кроме того, существует множество полезных функций для изучения сбоев путем поиска, сортировки и даже открытия редактора XAML с фокусом на неудачной привязке.

снимок экрана окна средства

Дважды щелкнув эти строки, откроется исходный XAML для привязки, как показано на следующем рисунке:

снимок экрана: примеры привязок в редакторе XAML.

Окно инструмента "Ошибки привязки XAML"

Окно средства "Сбои привязки XAML" доступно при отладке. Чтобы открыть панель, перейдите к Отладка>Windows>Сбои привязки XAML.

снимок экрана параметра

Или выберите ошибки привязки на панели инструментов приложения. Рядом с значком отображается количество сбоев привязки в окне средства.

снимок экрана: панель инструментов в приложении с кнопкой

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

снимок экрана: панель инструментов в приложении с кнопкой

Аналогичный значок также отображается в окне динамического визуального дерева.

Снимок экрана кнопки

Ниже приведено описание всех компонентов окна инструмента XAML для проверки привязок.

Снимок экрана окна инструмента

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

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

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

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

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

платформа поддерживаемые Перейдите к поддерживаемому источнику
WPF .NET Framework Да Нет
WPF .NET 5.0 RC2+ Да Да
UWP Да Нет
настольной WinUI3 Да Нет
MAUI (мультиплатформенный интерфейс приложений) Да Нет
Xamarin 4.5.0.266-pre3+ Да Да
Xamarin до 4.5.0.266-pre3 Нет Нет

В Visual Studio должна быть включена функция горячей перезагрузки XAML, чтобы работала навигация к источнику. Этот параметр находится в диалоговом окне "Средства>>отладки":

снимок экрана диалогового окна параметров горячей перезагрузки XAML.

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

Снимок экрана: сбой привязки XAML без исходного расположения.

Для WPF в .NET Framework ошибки привязки данных должны отображаться в выходных данных отладки для области "Сбои привязки XAML" для обнаружения и отображения их. Опция для этого находится в инструментах>в окне "Параметры>Отладка>Вывод">настройки трассировки WPF. Если параметр имеет значение Off или Критически важный, то ошибки привязки данных не записываются в отладочные выходные данные и не могут быть обнаружены. При использовании WPF в .NET 5, .NET 6 и более поздних версиях настройка вывода привязки данных не влияет на список сбоев.

снимок экрана параметров выходных данных WPF.