如何访问父级的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
答案 0 :(得分:1)
如果您想通过Bindings执行此操作,可以使用RelativeSource={RelativeSource Mode=FindAncestor AncestorType=yourNamespace:YourType}
代码,您可以使用VisualTreeHelper
来获取任何控件的可视父级。
如果您的层次结构中有多个此类型的父级,则可以另外指定AncestorLevel
。在您添加的示例中,看起来AncestorType=UserControl
和AncestorLevel=2
应该有效。