11

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

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

RelativeSourceAncestorType并且Mode=FindAncestor通常会在 WPF 中进行救援。

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

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

4

3 回答 3

20

我只是有同样的问题。大概这很常见??

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

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

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

    {Binding Tag.SomeProp, ElementName=gridTop}
    
于 2013-03-14T20:19:46.327 回答
1

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

于 2013-03-12T18:59:53.930 回答
0

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

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

您可以遍历视觉树,直到找到父级。这就是 FindAcestor 在内部所做的。您可以将其修饰为易于重用的行为。

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

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

于 2013-03-12T19:50:14.560 回答