我正在使用MVVM将视图绑定到树形结构中的对象。我有一个基类,用于实现树形结构中的项,并且该基类具有ContextMenu属性:
public IEnumerable<IMenuItem> ContextMenu
{
get
{
return m_ContextMenu;
}
protected set
{
if (m_ContextMenu != value)
{
m_ContextMenu = value;
NotifyPropertyChanged(m_ContextMenuArgs);
}
}
}
private IEnumerable<IMenuItem> m_ContextMenu = null;
static readonly PropertyChangedEventArgs m_ContextMenuArgs =
NotifyPropertyChangedHelper.CreateArgs<AbstractSolutionItem>(o => o.ContextMenu);
绑定到基类(以及所有派生类)的视图实现了一个上下文菜单,该菜单与该属性绑定:
<ContextMenu x:Name="contextMenu" ItemsSource="{Binding Path=(local:AbstractSolutionItem.ContextMenu)}"
IsEnabled="{Binding Path=(local:AbstractSolutionItem.ContextMenuEnabled)}"
ItemContainerStyle="{StaticResource contextMenuStyle}"/>
每个菜单项都绑定到一个IMenuItem对象(菜单项的ViewModel)。当您单击菜单项时,它使用命令在基本对象上执行命令。这一切都很好。
但是,一旦命令在IMenuItem类上执行,它有时需要获取对用户右键单击以弹出上下文菜单的对象的引用(或者至少是该对象的ViewModel)。这就是上下文菜单的全部意义。我应该如何传递树形项ViewModel的引用给MenuItem ViewModel?请注意,某些上下文菜单被树中的许多对象共享。