我想在树视图项目上使用右键单击时显示contextMenu项目。
之后,我想在单击我的MenuItem时使用命令,但我需要使用不同的viewmodel绑定命令,并使用来自我的treeview所选项目的良好viewmodel命令参数。
所以目前,我有类似的东西:
<TreeView x:Name="TreeViewProtocolsAndEquipments" AllowDrop="True"
ItemsSource="{Binding ModuleParams}">
<TreeView.Resources>
<!-- CONTEXT MENU -->
<!-- Protocol -->
<ContextMenu x:Key="ContextMenuProtocol">
<MenuItem Header="Add new equipment" Command="{Binding AddNewEquipmentCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
<MenuItem.Icon>
<Image Source="Images/Add.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
</ContextMenu>
<!-- MODULE XXX -->
<!-- ModuleParam > xxx -->
<HierarchicalDataTemplate DataType="{x:Type xxx:ModuleParamXXXViewModel}" ItemsSource="{Binding ModuleItems}">
<TextBlock Text="XXX" Foreground="Green" ContextMenu="{StaticResource ContextMenuProtocol}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
目前我的命令绑定到xxx:ModuleParamXXXViewModel如果我只是让{binding}
我也尝试过使用它,但它也不起作用:
<MenuItem Header="Add new equipment" Command="{Binding Path=DataContext.AddNewEquipmentCommand, Source={x:Reference TreeViewProtocolsAndEquipments}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
有了这个,我得 Object Reference没有设置为对象的实例
答案 0 :(得分:0)
UserControl
不是MenuItem
的视觉祖先,因为ContextMenu
位于自己的可视树中。
将Tag
的{{1}}属性绑定到TextBlock
,然后将UserControl
属性绑定到Command
的{{1}}:
PlacementTarget