动态绑定到Window的MenuItem上的ViewModel命令

|| 使用MVVM结构在WPF应用程序上工作。 我的窗口显示一个菜单和当前的ViewModel。在Menu的MenuItem之一上,我想列出一些在当前ViewModel中找到的命令。菜单中列出的命令将根据ViewModel进行更改。 我使它工作正常,但是样式搞砸了-Command MenuItems在另一个菜单框之内。我将附上屏幕截图。 我将ViewModel的ICommand对象(在此示例中为RelayCommands)包装在CommandViewModel中,该对象在菜单上公开了我想要的Command和Display字符串。这些CommandViewModels在列表中:“ 0”。 这是菜单的XAML。就像我说的那样,它有效,它显示正确的项目并执行了命令。显示内容不正确-有人可以告诉我原因以及如何解决吗?查看屏幕截图。
<Menu>
    <MenuItem Header=\"_Additional Options...\" ItemsSource=\"{Binding Path=CurrentWorkspace.AdditionalOptionsCommands}\">
        <MenuItem.ItemTemplate>
            <DataTemplate DataType=\"{x:Type vm:CommandViewModel}\">
                <MenuItem Header=\"{Binding Path=DisplayText}\" Command=\"{Binding Path=Command}\"/>
            </DataTemplate>
        </MenuItem.ItemTemplate>
    </MenuItem>
    <MenuItem Header=\"_Testing\">
        <MenuItem Header=\"This looks right\" />
        <MenuItem Header=\"This looks right\" />
    </MenuItem>   
</Menu>  
当前外观: 所需外观:     
已邀请:
        这是因为当您通过
ItemsSource
指定菜单项时,每个项目都会自动包装到
MenuItem
对象中。这样,在
DataTemplate
MenuItem
元素)中定义的内容将被包装为另一个
MenuItem
。 您需要为
MenuItem
定义一种样式,而不是定义
DataTemplate
,您可以在其中设置与视图模型属性的绑定,并将此样式用作父
MenuItem
上的
ItemContainerStyle
<Window.Resources>
    <Style x:Key=\"CommandMenuItemStyle\"
           TargetType=\"{x:Type MenuItem}\">
         <Setter Property=\"Header\"
                 Value=\"{Binding Path=DisplayText}\"/> 
         <Setter Property=\"Command\"
                 Value=\"{Binding Path=Command}\"/>
    </Style>
</Window.Resources>
...
<Menu>
    <MenuItem Header=\"_Additional Options...\" 
              ItemsSource=\"{Binding Path=CurrentWorkspace.AdditionalOptionsCommands}\" 
              ItemContainerStyle=\"{StaticResource CommandMenuItemStyle}\"/>
    <MenuItem Header=\"_Testing\">
        <MenuItem Header=\"This looks right\" />
        <MenuItem Header=\"This looks right\" />
    </MenuItem>   
</Menu>   
请参阅http://drwpf.com/blog/2008/03/25/itemscontrol-i-is-for-item-container/了解有关项目容器如何与
ItemsControl
控件一起使用的深入说明。     

要回复问题请先登录注册