Как получить доступ к родительскому DataContext в приложениях для хранения в Window 8

Это обычная ситуация в приложениях на основе XAML (WPF/Silverlight/WinRT).

Связанная с WPF ссылка → WPF Databinding: как мне получить доступ к" parent " контекст данных?

RelativeSource с AncestorType, а Mode=FindAncestor обычно приходит на помощь в WPF.

Оба из них отсутствуют в WinRT API. Как получить доступ к родительскому объекту (возможно, он не является немедленным), DataContext?

(Я знаю TemplateBinding и ElementBinding, но оба они не подходят в основном в DataTemplate).

Ответ 1

У меня была такая же проблема. Предположительно, это обычное явление.

Вот грубое решение, которое работает:

  • Привязать свойство тега элемента верхнего уровня к DataContext

    <Grid Name="gridTop" Tag="{Binding}" />
    
  • Привяжите свойство, которое вы хотите, через ElementName во вложенном элементе, то есть

    {Binding Tag.SomeProp, ElementName=gridTop}
    

Ответ 2

Связывание ElementName все еще возможно и может работать в вашем случае. В противном случае вам нужно будет реализовать приложенное поведение.

Ответ 3

Есть несколько способов решить эту проблему:

Связывание ElementName является наиболее распространенным подходом, как отметил Филип.

Вы можете пройти визуальное дерево, пока не найдете родителя. Это то, что делает FindAcestor внутренне. Вы могли бы одеть его в поведение для удобства повторного использования.

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

Выбор лучшего решения будет зависеть от ваших конкретных обстоятельств.