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 绑定失败工具窗口所有组件的描述。
- 顶部的工具栏包含如下所示的按钮:
- 清除失败列表:如果要在应用中显示新页面,并且想要查看是否有任何绑定失败出现,这非常有用。 启动新的调试会话时,将自动清除列表。
- 删除所选行:如果失败已修复或无关,可以从列表中将其删除。 如果绑定再次失败,已删除的行将再次显示。
- 清除所有筛选器:如果列表中有任何筛选器(例如搜索文本),则此按钮将清除它们并显示完整列表。
- 合并重复项:在项模板中,同一绑定通常会连续失败多次。 选择“合并重复项”按钮(周围带有轮廓)后,所有重复的失败都显示为一行。 计数栏 将显示失败发生的次数。
- 使用顶部角落的“搜索绑定失败”框,可以将失败筛选为仅包含特定文本的失败。
- 表列按顺序显示:
- 一个显示行是错误还是警告的图标。
- 如果支持在 XAML 中导航到失败的
{Binding}
,则会有一个显示尖括号<>
的图标。 请参阅支持的平台部分。 - 数据上下文:这是绑定的源对象的类型名称
- 请参阅 Binding.Source
- 绑定路径:这是绑定的属性路径
- 请参阅 Binding.Path
- 目标:这是绑定值将被设置的类型和属性名称。
- 目标类型:这是绑定的目标属性的预期类型。
- 说明:此列包含有关绑定具体失败之处的详细信息。
- 文件、行和 Project:如果已知,这是定义绑定的 XAML 中的位置。
- 右键单击一行或多行将显示一个上下文菜单,其中包含用于显示/隐藏列或分组的标准选项。 其他选项如下所示:
- 将所有文本从行或单个列复制到剪贴板。
- 复制原始错误将复制调试输出窗口中显示的文本。
- 查看源代码将跳转到 XAML 中某个选定行的绑定源。
- 重置列将撤消对列可见性和排序的所有更改,让你快速返回到最初显示的内容。
若要对列表进行排序,请单击任何列标题。 若要按额外列重新排序,请按住 Shift 键并单击另一列标题。 若要选择显示哪些列和隐藏列,请从快捷菜单中选择 显示列。 若要更改列的显示顺序,请将任何列标题拖动到左侧或右侧。
双击一行或按 Enter 导航到源后,可以按 F8 或 Shift+F8 在绑定失败列表中向下或向上移动。 这就像 Visual Studio 中显示列表的其他窗格一样。
支持的平台
如果绑定失败写入调试输出,则大多数 XAML 平台都受支持。 某些平台向调试器提供额外的源信息,允许导航到源。
平台 | 支持 | 导航到支持的源 |
---|---|---|
WPF .NET Framework | 是的 | 不 |
WPF .NET 5.0 RC2+ | 是的 | 是的 |
UWP | 是的 | 不 |
WinUI3 桌面 | 是的 | 不 |
MAUI (多平台应用用户界面) | 是的 | 不 |
Xamarin 4.5.0.266-pre3+ | 是的 | 是的 |
4.5.0.266-pre3 之前的 Xamarin | 不 | 不 |
必须在 Visual Studio 中启用 XAML 热重载选项,以便导航到源才能正常工作。 此选项位于 工具>选项>调试对话框:
导航到源仅适用于 XAML 源文件中定义的绑定,而不适用于通过代码创建的绑定。 可以清楚地看到哪些行支持导航到源代码。 若第二列中没有尖括号图标,则不支持导航到源代码,如以下屏幕截图中突出显示的行:
对于 .NET Framework 中的 WPF,数据绑定失败必须在 XAML 绑定失败窗格的调试输出中显示,才能检测和显示它们。 此选项位于 工具>选项>调试>输出窗口>WPF 跟踪设置 对话框中。 如果设置为“关”或“严重”,数据绑定错误就不会写入调试输出,并且无法被检测到。 在 .NET 5、.NET 6 及更高版本中使用 WPF 时,数据绑定输出设置不会影响失败列表。