WPF是一个很棒的工具集,XAML数据绑定功能非常强大,但我经常因其透明性而遇到困难:在没有错误的情况下调试数据绑定失败可能很困难。
例如,我最近不得不像这样更改Style
声明:
<DataGrid.RowStyle>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding TestProperty}" Value="False">
<Setter Property="DataGridRow.Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
进入这个:
<DataGrid.RowStyle>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.TestProperty}" Value="False">
<Setter Property="DataGridRow.Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
为了使DataGridRow属性受到影响。在设计或运行时,看到绑定到不同来源和RelativeSource
的含义是非常有用的。
是否存在任何此类工具/技术?
答案 0 :(得分:32)
您可以在绑定上使用PresentationTraceSources.TraceLevel
附加属性,以便在运行时获取输出中的详细日志记录。
在您的情况下,它将如下所示:
<DataGrid.RowStyle>
<Style>
<Style.Triggers>
<DataTrigger Value="False" Binding="{Binding DataContext.TestProperty,
RelativeSource={RelativeSource AncestorType=UserControl},
PresentationTraceSources.TraceLevel=High}">
<Setter Property="DataGridRow.Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
答案 1 :(得分:4)
Bea Stollnitz有一篇关于debugging WPF bindings的非常翔实的博客文章。
如果您使用的是Visual Studio 2010,则需要update the default WPF trace setting。
答案 2 :(得分:3)
如果在Visual Studio调试器下运行应用程序,则会将绑定错误报告给输出窗口。这些信息非常丰富,可以帮助您追踪任何错误。
答案 3 :(得分:0)
Visual Studio 2010中的另一个选项是在绑定上放置断点。这可以通过单击Binding关键字并按F9设置断点来轻松完成。 Binding关键字将以红色突出显示。如果突出显示较大的文本块,则可能是断点在您使用的编辑器中不起作用。如果发生这种情况,请尝试在解决方案资源管理器中右键单击该文件,选择“打开方式”,然后选择“源代码(文本)编辑器”。
在运行时点击断点时,可以使用Locals调试器窗口检查它,看看它绑定的是什么。