我正在实现一个资源管理器类型视图:左边是TreeView,右边是左侧所选项目的详细视图/编辑器视图。
TreeView包含不同类型的“叶子”对象。我已经定义了HierarchialDataTemplates来定义如何呈现对象以及应该呈现哪个上下文菜单。 MenuItems具有绑定到视图模型的命令。
我正在努力解决的问题是在哪里实现Command处理程序。直截了当的地方是“叶子”视图模型,但他们对“资源管理器”视图模型以及如何打开详细信息/编辑器视图一无所知。
最简单的解决方案是将叶子上下文菜单绑定到资源管理器视图模型,因为这是最佳执行操作的地方。
这是如何正常处理的?有没有“众所周知的”模式?
答案 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>