1
我想在显示一个contextMenu项目时使用右键单击树视图项目。将contextMenu绑定到树视图的不同视图模型
之后,我想使用一个命令,当我点击我的MenuItem,但我需要绑定命令与不同的viewmodel和命令参数与良好的viewmodel谁来自我的treeview选定的项目。
所以,就目前而言,我有这样的事情:
<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如果我只是让{结合}
- 我可以绑定我命令到我ActivatedProtocolsAndEquipmentsTreeViewModel(这个用户控件的datacontext)并保留在CommandParameter我的xxx:ModuleParamXXXViewModel(谁是我们触发右键单击以显示contextMenu的树视图中的项目)?
- 如何用MVVM实践以其他方式实现此目标?
我还试图用这一点,但它并没有太多的工作:
<MenuItem Header="Add new equipment" Command="{Binding Path=DataContext.AddNewEquipmentCommand, Source={x:Reference TreeViewProtocolsAndEquipments}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
而与此我得到对象引用不设置到对象的实例
感谢你的帮助,它的工作原理,但现在它永远不会触发我的ContextMenu,当我右键单击一个菜单项,它不显示contextMenu,但执行命令...我的绑定在菜单项中,所以,对于我来说,它必须在context菜单中的菜单项上单击而不是触发moduleitem在视觉树中的权利?那么为什么它执行这样的命令呢? – Karakayn
它的工作原理,但你没有看到ContextMenu?这恐怕没有意义。另外,根据我的建议更改绑定不会导致ContextMenu消失,所以我不知道您在做什么。 – mm8
我只是愚蠢的,我让我的CommandHandler构造函数中的某个地方_canExecute = true;所以它可以始终执行命令,不再需要点击...现在它可以工作,但我只是禁用了MenuItem,所以我不能再点击它...我会尝试找出发生了什么事(通过这个visualtree和logicaltree),谢谢你的帮助! – Karakayn