【问题标题】:Is there any way to effectively debug WPF data bindings?有什么方法可以有效地调试 WPF 数据绑定?
【发布时间】:2022-02-11 06:58:09
【问题描述】:

我遇到了一个数据绑定问题(一个单独的问题),通常在我编写代码时,我可以使用调试器单步执行并点击断点。可能是一个简单的问题花了我一整天,没有解决(现在变得非常沮丧),因为我不知道如何在我的 XAML 数据绑定上“运行调试器”。

如果有人能解释如何做到这一点,将不胜感激。

【问题讨论】:

  • 感谢所有出色的答案。每个人都 +1。

标签: wpf


【解决方案1】:

我不知道 VS 是否提供了一种简单的方法来调试绑定,但我通常使用Snoop 来调试绑定

这是一个工具,它将通过 WPF 应用程序并为您提供应用程序的可视树的 TreeView。您可以选择一个元素来查看其 DataContext 和其他属性。如果有任何绑定错误,该属性通常会突出显示,它会说明错误是什么。如果由于属性不存在而导致绑定失败,我通常可以跟踪 DataContext 并找出我的绑定出错的地方。

【讨论】:

  • Snoop 对我来说是天赐之物,它包含 WPF 中数据绑定的所有细微差别。
  • 叹息...几个月来一直在遭受这些无声的失败。终于找到了让它们稍微响亮的东西。
【解决方案2】:

添加一个虚拟转换器

<local:DebuggerConverter x:Key="DebuggerConverter" />

<TextBlock Text={Binding ToSomething, Converter={StaticResource DebuggerConverter}} />

转换器

public class DebuggerConverter : IValueConverter
{
  #region IValueConverter Members

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    // Set breakpoint here
    return value;
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    // Set breakpoint here
    return value;
  }

  #endregion
}

或使用它并查看您的输出窗口

<Window xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase">
  <TextBlock Text="{Binding ToSomething, diagnostics:PresentationTraceSources.TraceLevel=High}" />
</Window>

希望对你有帮助

【讨论】:

    【解决方案3】:

    当我开始使用 WPF 时,这是我在调试绑定时面临的主要问题。每次查看输出窗口并搜索您的绑定对于非常大的应用程序来说似乎很麻烦。然后我看到了这篇对 Bindings 有详细了解的优秀文章:

    (原始,死链接)http://bea.stollnitz.com/blog/index.php?s=presentationtrace

    存档:https://github.com/bstollnitz/old-wpf-blog/tree/master/45-DebuggingDataBinding

    希望这对您也有帮助... :)

    【讨论】:

    • 链接已失效,不幸的是网络存档没有它。
    • @StayOnTarget 在 cmets 的活动链接中发出数据绑定跟踪的相同技术可以配置为也发出失败的资源查找和其他错误。
    【解决方案4】:

    您可以在 Visual Studio 的输出窗口中获得有关绑定错误的一些基本信息。它将显示绑定表达式路径错误以及发生错误的行。

    【讨论】:

      【解决方案5】:

      在绑定中添加一个虚拟值转换器。在值转换器内放置一个断点。还要检查 Visual Studio 中的调试输出窗口是否存在任何绑定错误。

      【讨论】:

        猜你喜欢
        • 2011-01-09
        • 2010-11-24
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多