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 绑定失败”工具窗口

XAML 绑定失败工具窗口在调试期间可用。 若要打开该窗口,请转到“调试”>“Windows”>“XAML 绑定失败”。

“调试”菜单中 XAML 绑定失败选项的屏幕截图。

或者,选择应用程序工具栏中的“绑定失败”按钮。 图标旁边的数字显示工具窗口中显示多少个绑定失败。

显示绑定失败按钮的应用内工具栏的屏幕截图。

当工具窗口中没有绑定失败时,图标显示为灰色,旁边没有数字。 这在运行应用程序时很有用。 如果看到图标以数字变为红色,请单击图标以快速跳转到工具窗口,以查看发生了哪些绑定失败。 无需关注 Visual Studio 工具窗口。 绑定失败时,图标将立即告知你。

显示没有失败的“绑定失败”按钮的应用内工具栏的屏幕截图。

实时可视化树工具窗口中也会出现类似的图标

实时可视化树工具窗口中绑定失败按钮的屏幕截图。

下面是对 XAML 绑定失败工具窗口所有组件的描述。

“XAML 绑定失败”工具窗口的屏幕截图。

  • 顶部的工具栏包含如下所示的按钮:
    • 清除失败列表:如果要在应用中显示新页面,并且想要查看是否有任何绑定失败出现,这非常有用。 启动新的调试会话时,将自动清除列表。
    • 删除所选行:如果失败已修复或无关,可以从列表中将其删除。 如果绑定再次失败,已删除的行将再次显示。
    • 清除所有筛选器:如果列表中有任何筛选器(例如搜索文本),则此按钮将清除它们并显示完整列表。
    • 合并重复项:在项模板中,同一绑定通常会连续失败多次。 选择“合并重复项”按钮(周围带有轮廓)后,所有重复的失败都显示为一行。 计数栏 将显示失败发生的次数。
  • 使用顶部角落的“搜索绑定失败”框,可以将失败筛选为仅包含特定文本的失败。
  • 表列按顺序显示:
    • 一个显示行是错误还是警告的图标。
    • 如果支持在 XAML 中导航到失败的 {Binding},则会有一个显示尖括号 <> 的图标。 请参阅支持的平台部分。
    • 数据上下文:这是绑定的源对象的类型名称
    • 绑定路径:这是绑定的属性路径
    • 目标:这是绑定值将被设置的类型和属性名称。
    • 目标类型:这是绑定的目标属性的预期类型。
    • 说明:此列包含有关绑定具体失败之处的详细信息。
    • 文件Project:如果已知,这是定义绑定的 XAML 中的位置。
  • 右键单击一行或多行将显示一个上下文菜单,其中包含用于显示/隐藏列或分组的标准选项。 其他选项如下所示:
    • 将所有文本从行或单个列复制到剪贴板。
    • 复制原始错误将复制调试输出窗口中显示的文本。
    • 查看源代码将跳转到 XAML 中某个选定行的绑定源。
    • 重置列将撤消对列可见性和排序的所有更改,让你快速返回到最初显示的内容。

若要对列表进行排序,请单击任何列标题。 若要按额外列重新排序,请按住 Shift 键并单击另一列标题。 若要选择显示哪些列和隐藏列,请从快捷菜单中选择 显示列。 若要更改列的显示顺序,请将任何列标题拖动到左侧或右侧。

双击一行或按 Enter 导航到源后,可以按 F8Shift+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 热重载选项对话框的屏幕截图。

导航到源仅适用于 XAML 源文件中定义的绑定,而不适用于通过代码创建的绑定。 可以清楚地看到哪些行支持导航到源代码。 若第二列中没有尖括号图标,则不支持导航到源代码,如以下屏幕截图中突出显示的行:

显示没有源位置的 XAML 绑定失败的屏幕截图。

对于 .NET Framework 中的 WPF,数据绑定失败必须在 XAML 绑定失败窗格的调试输出中显示,才能检测和显示它们。 此选项位于 工具>选项>调试>输出窗口>WPF 跟踪设置 对话框中。 如果设置为“”或“严重”,数据绑定错误就不会写入调试输出,并且无法被检测到。 在 .NET 5、.NET 6 及更高版本中使用 WPF 时,数据绑定输出设置不会影响失败列表。

WPF 输出选项的屏幕截图。