是否有一个很好的工具可以在运行时调试XAML数据绑定行为/错误?

时间:2010-10-26 18:03:44

标签: .net wpf xaml

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的含义是非常有用的。

是否存在任何此类工具/技术?

4 个答案:

答案 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调试器窗口检查它,看看它绑定的是什么。