调试 WPF 数据绑定





4.00/5 (6投票s)
如何调试 WPF 数据绑定。
引言
我们在 WPF 中使用数据绑定有多频繁?我想说很多… 数据绑定可能是这个平台最重要的特性之一。有时我们需要调试 Binding 中传递的值,但由于数据绑定是由 XAML 解析器创建的,因此我们无法创建 Visual Studio 断点并逐步执行代码…
实现解决方案
调试数据绑定的一种方法是 使用转换器并在 Convert 方法中设置断点。这可能比较繁琐,因为您需要创建一个虚拟 Converter 并在其中设置断点。如果有一种方法可以在 Binding 中输入一个标志,然后调试器中断以让您检查 Binding 值,那就太好了。这可以通过使用标记扩展来实现。标记扩展基本上是一种从 XAML 创建特定对象实例的方法。例如,{Binding PropertyX} 是一个创建 Binding 对象的标记扩展。因此,我们可以做的是创建一个返回 Converter 的标记扩展,该 Converter 可用于调试 Binding。converter 调用 Debugger 类的 Break 方法,以强制在 Convert 方法中设置断点。
用于我们的 converter 的标记扩展如下所示…
 
 
基本上,最重要的部分是标记扩展的 ProvideValue 方法。在这里,我们创建 converter 的一个实例并返回它。现在我们需要做的就是让 Binding 使用这个标记扩展,以便使用 DebugConverter(它会自动中断调试器,以便您可以调试 Binding)。以下 XAML 显示了如何轻松使用扩展
<Window x:Class="DebuggingDataBinding.Window1"
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml 
    xmlns:local="clr-namespace:DebuggingDataBinding"
    Title="Window1" Height="300" Width ="300">
  <Grid Height="{Binding RelativeSource =
      {RelativeSource AncestorType={ x:Type Window}}, Path =Height,
      Converter={local:DebugBinding }}">
      ...
  </Grid>
</Window>
基本上,Converter={local:DebugBinding} 完成了所有操作。它将创建一个 Converter 的实例并将其返回到 binding 的 Converter 属性。所以,这就是它 - 一个简单但有用的标记扩展,用于调试数据绑定。


