命令不适用于 MVVM 中的顶级 MenuItem

Command doesn't work on top level MenuItem in MVVM

如果 MenuItem 没有子 MenuItem,它工作正常,像这样:

<MenuItem Header="Open" Command="{Binding OpenCommand}"/>

但是,当我向其添加子菜单项时,该命令不起作用:

<MenuItem Header="Open" Command="{Binding OpenCommand}">
    <MenuItem />
</MenuItem>

点击事件也不是这样的:

<MenuItem Header="Open" Click="MenuItem_Click">
    <MenuItem />
</MenuItem>

当我尝试将命令添加到 header:

<MenuItem>
    <MenuItem.Header>
        <TextBlock>
            <TextBlock.InputBindings>
                 <MouseBinding Gesture="LeftClick" Command="{Binding OpenCommand}"/>
            </TextBlock.InputBindings>
            Open
        </TextBlock>
    </MenuItem.Header>
    <MenuItem />
</MenuItem>

命令有效,但子菜单项不显示。

任何帮助将不胜感激,请原谅我的 half-baked 英语。

如果您有子菜单 MenuItems,则使用(用户期望的)点击事件来显示子菜单。要对子菜单打开做出反应,请使用事件 SubmenuOpened.

如果您真的希望能够打开子菜单并单击 "Open",您可以使用这个 snipper,但我真的不建议它:

<MenuItem SubmenuOpened="MenuItem_OnSubmenuOpened"> <!-- handle sub menu opening if desired -->
  <MenuItem.Header>
    <Button Click="Button_Click">Open V2</Button> <!-- handle click on "Open" if desired; doesn't open sub menu! -->
  </MenuItem.Header>
  <MenuItem />
</MenuItem>

请注意,我已经在 "Open" 不是顶级菜单项的情况下对此进行了测试。