用于MVVM的WPF MenuItem模板

Jos*_*ose 4 xaml datatemplate mvvm

我无法编写xaml表示以允许绑定到我的后台ViewModel以进行级联菜单

这是VM:

public class MenuNode
{
  public string Header {get;}
  public List<MenuNode> Items {get;}
}
Run Code Online (Sandbox Code Playgroud)

我有的xaml是这样的:

<ContextMenu ItemsSource="{Binding Choices}" >
    <ContextMenu.Resources>
        <DataTemplate DataType="{x:Type vmi:MenuNode}">
            <MenuItem Header="{Binding Header}" ItemsSource="{Binding Items}"/>
        </DataTemplate> 
    </ContextMenu.Resources>
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)

当菜单弹出时,我得到带箭头的第一级条目(表示应该有一个子菜单),但当我将鼠标悬停在菜单上时,它不会显示子菜单项.

有任何想法吗?

Jos*_*h G 5

好的,这是问题所在:

由于某种原因,MenuItems你生成的DataTemplate是被包裹在另一个内部MenuItem(结果是嵌套的MenuItems).子项目没有被打开,因为外面MenuItem没有孩子.

解决方案是使用a HierarchicalDataTemplate代替:

<ContextMenu ItemsSource="{Binding Choices}" >
    <ContextMenu.Resources>
        <HierarchicalDataTemplate DataType="{x:Type vmi:MenuNode}" ItemsSource="{Binding Items}">
            <TextBlock Text="{Binding Header}"/>
        </HierarchicalDataTemplate> 
    </ContextMenu.Resources>
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)