65.9K
CodeProject 正在变化。 阅读更多。
Home

调试 WPF 数据绑定

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (6投票s)

2007 年 12 月 19 日

CPOL

2分钟阅读

viewsIcon

37943

downloadIcon

306

如何调试 WPF 数据绑定。

引言

我们在 WPF 中使用数据绑定有多频繁?我想说很多… 数据绑定可能是这个平台最重要的特性之一。有时我们需要调试 Binding 中传递的值,但由于数据绑定是由 XAML 解析器创建的,因此我们无法创建 Visual Studio 断点并逐步执行代码…

实现解决方案

调试数据绑定的一种方法是 使用转换器并在 Convert 方法中设置断点。这可能比较繁琐,因为您需要创建一个虚拟 Converter 并在其中设置断点。如果有一种方法可以在 Binding 中输入一个标志,然后调试器中断以让您检查 Binding 值,那就太好了。这可以通过使用标记扩展来实现。标记扩展基本上是一种从 XAML 创建特定对象实例的方法。例如,{Binding PropertyX} 是一个创建 Binding 对象的标记扩展。因此,我们可以做的是创建一个返回 Converter 的标记扩展,该 Converter 可用于调试 Bindingconverter 调用 Debugger 类的 Break 方法,以强制在 Convert 方法中设置断点。

用于我们的 converter 的标记扩展如下所示…

debugbinding.jpg

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

© . All rights reserved.