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

时间:2015-06-29 13:51:15

标签: wpf mvvm binding command menuitem

如果MenuItem没有子MenuItem,它可以正常工作,如下所示:

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

但是,当我向它添加一个子MenuItem时,命令不起作用:

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

点击事件也不会像这样:

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

当我尝试将Command添加到标题时:

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

命令有效但子MenuItem不显示。

任何帮助都会受到赞赏,请原谅我的半生不熟的英语。

1 个答案:

答案 0 :(得分:1)

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

如果确实希望能够打开子菜单并点击“打开”,您可以使用此片段,但我真的不建议:

<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>

请注意,我已经通过“打开”测试了这个,而不是顶级菜单项。