如何在TreeView中的项目上处理上下文菜单命令

时间:2013-07-12 10:53:15

标签: wpf mvvm

我正在实现一个资源管理器类型视图:左边是TreeView,右边是左侧所选项目的详细视图/编辑器视图。

TreeView包含不同类型的“叶子”对象。我已经定义了HierarchialDataTemplates来定义如何呈现对象以及应该呈现哪个上下文菜单。 MenuItems具有绑定到视图模型的命令。

我正在努力解决的问题是在哪里实现Command处理程序。直截了当的地方是“叶子”视图模型,但他们对“资源管理器”视图模型以及如何打开详细信息/编辑器视图一无所知。

最简单的解决方案是将叶子上下文菜单绑定到资源管理器视图模型,因为这是最佳执行操作的地方。

这是如何正常处理的?有没有“众所周知的”模式?

1 个答案:

答案 0 :(得分:1)

刚刚找到了这个问题的答案 - Bind to parent DataContext within DataTemplate - 这让我走上正轨。

UserControl获取名称,命令绑定引用此名称 - Source={x:Reference uc}}

<UserControl x:Class="View.AdminWorkstationView" Name="uc">

<UserControl.Resources>
    <DataTemplate DataType="{x:Type vm:RequiredDeviceViewModel}">
        <DockPanel>
            <DockPanel.ContextMenu>
                <ContextMenu>
                    <MenuItem Command="{Binding DataContext.EditDeviceCommand, Source={x:Reference uc}}" 
                              CommandParameter="{Binding}"
                              Header="Edit device" />
                </ContextMenu>
            </DockPanel.ContextMenu>
        </DockPanel>
    </DataTemplate>

</UserControl.Resources>