如何在Windows 8商店应用程序中访问Parent的DataContext

时间:2013-03-12 16:21:17

标签: wpf xaml windows-8 windows-runtime winrt-xaml

这是基于XAML的应用程序(WPF / Silverlight / WinRT)中的常见情况。

WPF相关链接 - > WPF Databinding: How do I access the "parent" data context?

RelativeSource AncestorType,而Mode=FindAncestor通常会在WPF中拯救。

WinRT API中缺少这两个。如何访问父母(可能不是直接的),DataContext

(我知道TemplateBindingElementBinding,但两者都不适合在DataTemplate中使用。)

3 个答案:

答案 0 :(得分:19)

我遇到了同样的问题。想必这是常见的??

这是一个有效的原始解决方案:

  • 将顶级元素的Tag属性绑定到DataContext

    <Grid Name="gridTop" Tag="{Binding}" />
    
  • 通过嵌套元素中的ElementName绑定所需的属性,即

    {Binding Tag.SomeProp, ElementName=gridTop}
    

答案 1 :(得分:1)

仍然可以使用ElementName绑定,并且可能适用于您的情况。否则,您需要实现附加行为。

答案 2 :(得分:0)

有几种方法可以解决这个问题:

如Filip所指出的,ElementName绑定是最常用的方法。

您可以走视觉树,直到找到父母。这就是FindAcestor内部所做的事情。你可以在行为上装扮它以便于重复使用。

如果您使用视图模型,则可以使用消息而不是绑定,或者可以将父上下文添加到每个子视图模型。

选择最佳解决方案取决于您的具体情况。