如何在 Windows 8 应用商店应用中访问父级的 DataContext。



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

WPF相关链接-> WPF数据绑定:如何访问"父"数据上下文?

RelativeSourceAncestorTypeMode=FindAncestor通常在WPF中起拯救作用。

这两个在WinRT API中都是缺失的。如何访问父方的(可能不是直接的)DataContext ?

(我知道TemplateBindingElementBinding,但两者都不适合主要在DataTemplate)。

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

这是一个粗略的解决方案:

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

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

    {Binding Tag.SomeProp, ElementName=gridTop}
    

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

有几种方法可以处理这个问题:

ElementName绑定是最常见的方法,正如philip指出的。

你可以走视觉树直到找到父节点。这就是FindAcestor在内部所做的。您可以用行为来修饰它,以便于重用。

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

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

最新更新