2011-06-19 121 views
4

我有一个绑定到ViewModel的UserControl。 UserControl绑定到项目列表(类对象)。因此,当我想要将各种元素绑定到DataGrid的RowDetails模板上的属性时,我使用:wpf:祖先的FindAncestor

"{Binding RelativeSource={RelativeSource FindAncestor, 
          AncestorType={x:Type UserControl}}, 
       Path=DataContext.SomeProperty}" 

这可以正常工作。现在我想将RowDetails的内容分解到一个UserControl,我可以在其他顶级UserControls中使用DataGrid。那么,如何找到一个UserControl,它是写入此绑定语句的UserControl的祖先?

我无法在x:Type声明中指定顶级UserControl的名称,因为它每次都不相同。

回答

4

你可以用AncestorLevel做到这一点,但我严重怀疑这是绑定的正确方法。

您将拥有一个UserControl,它的工作取决于其在逻辑树中的位置。

如果你在其中插入一些其他的usercontrol,它将停止工作。

正确的绑定方式是使用提供给控件的Datacontext。

如果缺少一些数据而不是修改该数据环境来获取数据,即使这意味着要从其父级的数据上下文中读取该数据。

3

看看AncestorLevel

"{Binding RelativeSource={RelativeSource FindAncestor, 
             AncestorType={x:Type UserControl}, 
             AncestorLevel=2}, 
      Path=DataContext.SomeProperty}"