.net wpf:祖先的发现者

.net wpf:祖先的发现者,.net,wpf,binding,.net,Wpf,Binding,我有一个绑定到ViewModel的UserControl。在UserControl上,绑定到项列表(类对象)。因此,当我想将各种元素绑定到DataGrid的RowDetails模板上的属性时,我使用: "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContex

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

"{Binding RelativeSource={RelativeSource FindAncestor, 
                          AncestorType={x:Type UserControl}}, 
               Path=DataContext.SomeProperty}"
这个很好用。现在,我想将RowDetails内容分解成一个UserControl,我可以在其他顶级UserControls中使用,其中包含数据网格。那么,如何找到一个UserControl,它是编写绑定语句的UserControl的祖先呢

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

请查看


你可以用AncestorLevel来做,但是我严重怀疑这是绑定的正确方式

您将拥有一个UserControl,它根据其在逻辑树中的位置工作

如果你在这两个中间插入其他用户控件,它将停止工作。

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

如果它丢失了一些数据,则调整datacontext以获得它,即使这意味着从其父对象的datacontext读取数据

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