2013-07-12 42 views
0

我正在实现一个资源管理器类型的视图:左侧是一个TreeView,右侧是左侧选定项目的详细视图/编辑器视图。如何在TreeView中的项目上处理上下文菜单命令

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

我在努力的是在哪里实现命令处理程序。直线前进的地方应该放在'叶'视图模型中,但他们对“探索者”视图模型以及如何打开细节/编辑器视图并不知情。

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

这通常如何处理?有没有“知名”的模式?

+1

Imho,你应该绑定到资源管理器视图模型 - 在你的情况下,它是'叶'视图模型的某种类型的管理器。在我看来,这个解决方案没有任何问题。 –

回答

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> 
相关问题