Диагностика привязки данных 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
- Для .NET MAUI: привязка данных .NET MAUI
Ошибки привязки всегда записываются в окно вывода отладки в Visual Studio. Но сбои привязки легко пропустить в выводе отладки, так как он содержит другие отладочные сведения, из-за которых они исчезают из поля зрения. Ниже приведен пример сбоя привязки WPF в отладочном окне:
Сбой привязки может находиться на сотни строк выше видимой части окна, и текст не указывает точно, какая именно привязка вызвала сбой, поэтому нужно обдумать это и выполнить поиск.
Теперь в окне средства "Сбои привязки XAML" можно четко увидеть, какие привязки завершились сбоем, а также соответствующие данные для каждого сбоя, например расположение файла в XAML. Кроме того, существует множество полезных функций для изучения сбоев путем поиска, сортировки и даже открытия редактора XAML с фокусом на неудачной привязке.
Дважды щелкнув эти строки, откроется исходный XAML для привязки, как показано на следующем рисунке:
Окно инструмента "Ошибки привязки XAML"
Окно средства "Сбои привязки XAML" доступно при отладке. Чтобы открыть панель, перейдите к Отладка>Windows>Сбои привязки XAML.
Или выберите ошибки привязки на панели инструментов приложения. Рядом с значком отображается количество сбоев привязки в окне средства.
Если в окне инструмента отсутствуют сбои привязки, значок отображается как серый без числа рядом с ним. Это полезно при запуске приложения. Если значок станет красным с числом, щелкните на него, чтобы быстро перейти к окну инструмента и увидеть, какие произошли сбои привязки. Нет необходимости следить за окнами инструментов Visual Studio. Если привязка завершается ошибкой, значок сразу сообщит вам.
Аналогичный значок также отображается в окне динамического визуального дерева.
Ниже приведено описание всех компонентов окна инструмента XAML для проверки привязок.
- Панель инструментов вверху содержит кнопки следующим образом:
- Очистить список сбоев. Это полезно, если вы собираетесь отобразить новую страницу в приложении и хотите узнать, отображаются ли какие-либо сбои привязки. При запуске нового сеанса отладки список автоматически очищается.
- Удалить выбранные строки: если сбой был исправлен или не имеет значения, его можно удалить из списка. Удаленные строки будут снова отображаться, если привязка снова завершится ошибкой.
- Очистить все фильтры: Если в списке есть фильтры, например, поиск текста, эта кнопка снимет их и отобразит полный список.
- Объединить дубликаты: часто одна и та же привязка будет прерываться много раз подряд, когда она находится в шаблоне элемента. Если кнопка «Объединить дубликаты» выбрана (обведена контуром), все повторяющиеся сбои отображаются как одна строка. Столбец count показывает, сколько раз произошел сбой.
- Поле под названием «Сбои привязки поиска» в верхнем углу позволяет отфильтровать сбои, оставив только те, которые содержат определенный текст.
- Столбцы таблицы отображены в следующем порядке:
- Значок, показывающий, является ли строка ошибкой или предупреждением.
- Значок, показывающий угловые скобки
<>
, если переход к неудачной{Binding}
в XAML поддерживается. См. раздел поддерживаемых платформ. -
контекст данных: это имя типа для исходного объекта привязки.
- См. Binding.Source
-
путь привязки: это путь привязки для свойства
- См. раздел Binding.Path
- Целевой: Это тип и название свойства, куда будет устанавливаться значение привязки.
- Тип цели: это ожидаемый тип свойства привязки цели.
- описание. Этот столбец содержит дополнительные сведения о том, что именно произошло сбоем привязки.
- файл, строкаи проект: если известно, это местоположение в 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, а не в том случае, если они создаются с помощью кода. Вы можете четко увидеть, какие строки поддерживают переход к источнику. Если в втором столбце нет значка угловой скобки, то переход к источнику не поддерживается, например с выделенной строкой на следующем снимке экрана:
Для WPF в .NET Framework ошибки привязки данных должны отображаться в выходных данных отладки для области "Сбои привязки XAML" для обнаружения и отображения их. Опция для этого находится в инструментах>в окне "Параметры>Отладка>Вывод">настройки трассировки WPF. Если параметр имеет значение Off или Критически важный, то ошибки привязки данных не записываются в отладочные выходные данные и не могут быть обнаружены. При использовании WPF в .NET 5, .NET 6 и более поздних версиях настройка вывода привязки данных не влияет на список сбоев.