调试 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
属性。所以,这就是它 - 一个简单但有用的标记扩展,用于调试数据绑定。