Есть ли хороший инструмент для отладки поведения/ошибок привязки 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>
Ответ 2
У Bea Stollnitz есть очень информативное сообщение в блоге о отладка привязок WPF.
Если вы используете Visual Studio 2010, вам нужно обновить настройки трассировки WPF по умолчанию.
Ответ 3
Если вы запустите приложение под отладчиком Visual Studio, в окно вывода будут отправлены ошибки привязки. Они очень информативны и должны помочь вам выявить любые ошибки.
Ответ 4
Еще один вариант в Visual Studio 2010 - поставить точку останова на привязку. Это можно легко сделать, поместив ваш клик на ключевое слово Binding и нажав F9, чтобы установить точку останова. Ключевое слово Binding будет выделено красным цветом. Если выделен большой фрагмент текста, может быть, что точка останова не работает в редакторе, который вы используете. В этом случае попробуйте щелкнуть правой кнопкой мыши файл в обозревателе решений, выберите "Открыть с помощью" и выберите "Редактор исходного кода (текст)".
Когда вы нажмете точку останова во время выполнения, вы можете проверить ее с помощью окна отладки локаторов и посмотреть, к чему она привязана.