C# treeviewitem模板内上下文菜单中的数据绑定
我有两个级别的树视图,在第二个级别中,我有一个包含上下文菜单的模板,我试图将上下文菜单所属的TreeView作为CommandParameter传递,但迄今为止没有成功,在我的应用程序中,TreeView有一个HierarchycalDataTemplate,但下面是我的XAML的一个简化示例:C# treeviewitem模板内上下文菜单中的数据绑定,c#,wpf,binding,command,contextmenu,C#,Wpf,Binding,Command,Contextmenu,我有两个级别的树视图,在第二个级别中,我有一个包含上下文菜单的模板,我试图将上下文菜单所属的TreeView作为CommandParameter传递,但迄今为止没有成功,在我的应用程序中,TreeView有一个HierarchycalDataTemplate,但下面是我的XAML的一个简化示例: <Grid Background="Transparent"> <TreeView> <TreeViewItem Header="blabl
<Grid
Background="Transparent">
<TreeView>
<TreeViewItem Header="blabla1"/>
<TreeViewItem Header="blabla2">
<TreeViewItem Header="innerblalbla">
<TreeViewItem.ContextMenu>
<ContextMenu>
<MenuItem Header="Test"
Command="{Binding PlacementTarget.DataContext.testCommand,
RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ContextMenuu}}}"
CommandParameter=??????/>
</ContextMenu>
</TreeViewItem.ContextMenu>
</TreeViewItem>
</TreeViewItem>
</TreeView>
</Grid>
MenuItem
与treevieItem
不在同一个可视树中,这就是FindAncestor在窗口之前无法移动的原因
您可以使用ContextMenu
的PlacementTarget
来获取TreeViewItem,它将自动继承窗口的DataContext
这就是你如何做到的:
<MenuItem Header="Test"
Command="{Binding PlacementTarget.DataContext.testCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type ContextMenu}}}"/>
<MenuItem Header="Test"
Command="{Binding PlacementTarget.DataContext.testCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type ContextMenu}}}"/>