Wpf 如何将CommandParameter绑定到未知父级

Wpf 如何将CommandParameter绑定到未知父级,wpf,treeview,Wpf,Treeview,我在我的应用程序资源中声明了以下上下文菜单,它被我的应用程序中的几个树视图引用。我正在尝试将TreeView的SelectedItem属性作为命令参数发送 问题是我不知道如何获取命令来发送TreeView的SelectedItem 参数始终为空。我尝试过使用相关资源、模板化父母等。;以及,寻找treeview、treeviewitem和datacontext的目标。我还尝试发送这些项目的不同属性(不仅仅是TreeView的SelectedItem)。我似乎无法解决任何问题 <Applica

我在我的应用程序资源中声明了以下上下文菜单,它被我的应用程序中的几个树视图引用。我正在尝试将TreeView的SelectedItem属性作为命令参数发送

问题是我不知道如何获取命令来发送TreeView的SelectedItem

参数始终为空。我尝试过使用相关资源、模板化父母等。;以及,寻找treeview、treeviewitem和datacontext的目标。我还尝试发送这些项目的不同属性(不仅仅是TreeView的SelectedItem)。我似乎无法解决任何问题

<Application.Resources>
    <ContextMenu x:Key="ContextMenu.TreeView">
        <MenuItem 
            Header="Add Node"
            Command="{Binding AddNodeCommand}"
            CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource AncestorType={x:Type TreeView}}}"></MenuItem>
        <MenuItem
            Header="Delete Node"
            Command="{Binding DeleteNodeCommand}"
            CommandParameter="{Binding Path=SelectedItem,RelativeSource={RelativeSource AncestorType={x:Type TreeView}}}"></MenuItem>
    </ContextMenu>
</Application.Resources>

<UserControl ...>
    <TreeView 
        x:Name="TaxonomyTree"
        ItemsSource="{Binding Path=Tree}"        
        ContextMenu="{StaticResource ContextMenu.TreeView}"/>
</UserControl>

试试:


Contextmenu
与它所链接的
TreeView
不是同一个可视树的一部分。因此,我们需要使用
PlacementTarget
相应地路由到
TreeView

尝试:


Contextmenu
与它所链接的
TreeView
不是同一个可视树的一部分。因此,我们需要使用
PlacementTarget
相应地路由到
TreeView

<ContextMenu x:Key="ContextMenu.TreeView">
  <MenuItem Command="{Binding AddNodeCommand}"
            CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor,
                                                                      AncestorType={x:Type ContextMenu}},
                                        Path=PlacementTarget.SelectedItem}"
            Header="Add Node" />
  <MenuItem Command="{Binding DeleteNodeCommand}"
            CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor,
                                                                      AncestorType={x:Type ContextMenu}},
                                        Path=PlacementTarget.SelectedItem}"
            Header="Delete Node" />
</ContextMenu>