这是基于XAML的应用程序(WPF / Silverlight / WinRT)中的常见情况。
WPF相关链接 - > WPF Databinding: How do I access the "parent" data context?
RelativeSource
AncestorType
,而Mode=FindAncestor
通常会在WPF中拯救。
WinRT API中缺少这两个。如何访问父母(可能不是直接的),DataContext
?
(我知道TemplateBinding
和ElementBinding
,但两者都不适合在DataTemplate中使用。)
答案 0 :(得分:19)
我遇到了同样的问题。想必这是常见的??
这是一个有效的原始解决方案:
将顶级元素的Tag属性绑定到DataContext
<Grid Name="gridTop" Tag="{Binding}" />
通过嵌套元素中的ElementName绑定所需的属性,即
{Binding Tag.SomeProp, ElementName=gridTop}
答案 1 :(得分:1)
仍然可以使用ElementName绑定,并且可能适用于您的情况。否则,您需要实现附加行为。
答案 2 :(得分:0)
有几种方法可以解决这个问题:
如Filip所指出的,ElementName绑定是最常用的方法。
您可以走视觉树,直到找到父母。这就是FindAcestor内部所做的事情。你可以在行为上装扮它以便于重复使用。
如果您使用视图模型,则可以使用消息而不是绑定,或者可以将父上下文添加到每个子视图模型。
选择最佳解决方案取决于您的具体情况。