将contextMenu绑定到树视图中的其他视图模型

时间:2017-08-23 08:22:51

标签: c# wpf xaml mvvm treeview

我想在树视图项目上使用右键单击时显示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}

  1. 我可以将我的Command绑定到ActivatedProtocolsAndEquipmentsTreeViewModel(此usercontrol的datacontext)并保留CommandParameter my xxx:ModuleParamXXXViewModel(我们触发右键单击以显示contextMenu的树视图中的Item)?
  2. 如何通过MVVM练习以其他方式实现这一目标?
  3. 我也尝试过使用它,但它也不起作用:

    <MenuItem Header="Add new equipment" Command="{Binding Path=DataContext.AddNewEquipmentCommand, Source={x:Reference TreeViewProtocolsAndEquipments}}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
    

    有了这个,我得 Object Reference没有设置为对象的实例

1 个答案:

答案 0 :(得分:0)

UserControl不是MenuItem的视觉祖先,因为ContextMenu位于自己的可视树中。

Tag的{​​{1}}属性绑定到TextBlock,然后将UserControl属性绑定到Command的{​​{1}}:

PlacementTarget