Как получить доступ к родительскому 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 внутренне. Вы могли бы одеть его в поведение для удобства повторного использования.
Если вы используете модели просмотра, вы можете использовать сообщения вместо привязок или вы можете добавить родительский контекст в каждую модель детского представления.
Выбор лучшего решения будет зависеть от ваших конкретных обстоятельств.