我有一个绑定到ViewModel的UserControl。在UserControl上绑定到一个项目列表(类对象)。因此,当我想要将各种元素绑定到DataGrid的RowDetails模板上的属性时,我使用:
"{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.SomeProperty}"这可以很好地工作。现在,我想将RowDetails内容分解成一个UserControl,我可以在其他带有DataGrids的顶级UserControls中使用它。那么,如何找到作为编写此绑定语句的UserControl的祖先的UserControl呢?
我不能在x: UserControl声明中指定顶级类型的名称,因为它每次都是不同的。
发布于 2011-06-20 00:36:26
你可以用AncestorLevel来做这件事,但是我严重怀疑这是正确的绑定方式。
您将拥有一个根据其在逻辑树中的位置而工作的UserControl。
如果你在这两个中间插入一些其他的用户控件,它就会停止工作。
正确的绑定方式是使用提供给控件的Datacontext。
如果它丢失了一些数据,那么就调整datacontext以获得它,即使这意味着从其父数据上下文中读取数据。
发布于 2011-06-20 00:12:08
看一看AncestorLevel。
"{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl},
AncestorLevel=2},
Path=DataContext.SomeProperty}"https://stackoverflow.com/questions/6402902
复制相似问题