如何访问父级的DataContext

时间:2017-09-28 07:13:37

标签: c# wpf xaml

如何访问父级的DataContext?

我有一个包含3个按钮的UserControl,我想将它用于几个不同的UserControls - 因此用户总是可以使用相同的操作。

当点击按钮'添加'时,我需要在当前的DataContext中做一些事情,这不是什么麻烦,因为我可以执行以下操作:

<configuration>
    <startup><supportedRuntime version="v4.0" sku=".NetFramework,Version=v4.6.2"/></startup>
</configuration>

单击“Del”按钮时,我想从public void CtrlClicked(object sender, RoutedEventArgs e){ Button btn = sender as Button; MyClass2 c2 = btn.DataContext as MyClass2; c2.CallCustomMethod(); } 中保存的MyClass2中删除对象List<MyClass2>。 为此,我需要访问MyClass1。

我的用户界面(伪代码):

MyClass1

那么如何才能访问MyClass1-objext?

我发现我可以使用Window (DataContext = base) Grid UserControl uc1 (DataContext = base.MyClass1) Grid ListView ListView.DataTemplate UserControl uc2 (DataContext = base.MyClass1.MyClass2) Grid UserControl ucButtons Grid UserControl uc2 ListView.DataTempate ListView.PanelTemplate UniformGrid ListView.PanelTemplate ListView Grid UserControl uc1 Grid Window 走树,但只能这样做到某一点:

.Parent

所以从这里开始没有进一步向上,这意味着我无法通过Grid gScheduleControlBar = btn.Parent as Grid; UserControl ucScheduleControlBar = gScheduleControlBar.Parent as UserControl; Grid gDay = ucScheduleControlBar.Parent as Grid; UserControl ucDay = gDay.Parent as UserControl; //ucDay.Name confirms it's the userControl defined Grid grid = ucDay.Parent as Grid; // grid.Name="" and grid.Parent = null '边界'。

任何想法?
作为后备选项,当然可以在UserControl中存储MyClass1的引用。

EDIT =&gt;最终结果:
MyClass2

1 个答案:

答案 0 :(得分:1)

如果您想通过Bindings执行此操作,可以使用RelativeSource={RelativeSource Mode=FindAncestor AncestorType=yourNamespace:YourType}代码,您可以使用VisualTreeHelper来获取任何控件的可视父级。

如果您的层次结构中有多个此类型的父级,则可以另外指定AncestorLevel。在您添加的示例中,看起来AncestorType=UserControlAncestorLevel=2应该有效。