Есть ли хороший инструмент для отладки поведения/ошибок привязки 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.

Существуют ли какие-либо такие инструменты/методы?

Ответ 1

Вы можете использовать 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>

Ответ 3

Если вы запустите приложение под отладчиком Visual Studio, в окно вывода будут отправлены ошибки привязки. Они очень информативны и должны помочь вам выявить любые ошибки.

Ответ 4

Еще один вариант в Visual Studio 2010 - поставить точку останова на привязку. Это можно легко сделать, поместив ваш клик на ключевое слово Binding и нажав F9, чтобы установить точку останова. Ключевое слово Binding будет выделено красным цветом. Если выделен большой фрагмент текста, может быть, что точка останова не работает в редакторе, который вы используете. В этом случае попробуйте щелкнуть правой кнопкой мыши файл в обозревателе решений, выберите "Открыть с помощью" и выберите "Редактор исходного кода (текст)".

Когда вы нажмете точку останова во время выполнения, вы можете проверить ее с помощью окна отладки локаторов и посмотреть, к чему она привязана.