我有一个绑定到ViewModel的UserControl。在UserControl上绑定了一个项目列表(类对象)。因此,当我想将各种元素绑定到DataGrid的RowDetails模板上的属性时,我使用:
"{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.SomeProperty}"
这很好用。现在我想将RowDetails的东西分解为UserControl,我可以在其他顶级UserControls中使用DataGrids。那么我如何找到UserControl,它是UserControl的祖先,在其中编写了这个绑定语句?
我无法在x:Type声明中指定顶级UserControl的名称,因为它每次都不同。
答案 0 :(得分:5)
"{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl},
AncestorLevel=2},
Path=DataContext.SomeProperty}"
答案 1 :(得分:5)
您可以使用AncestorLevel执行此操作,但我非常怀疑这是绑定的正确方法。
您将拥有一个UserControl,它取决于它在逻辑树中的位置。
如果要在这两个中间插入一些其他用户控件,它将停止工作。
绑定的正确方法是使用提供给控件的Datacontext。
如果缺少某些数据而不是使用datacontext来获取它,即使这意味着从其父级的datacontext中读取它。