Comment puis-je lier une ObservableCollection des ViewModels à un MenuItem?

Quand je lier les Éléments du Menu avec une ObservableCollection, seul le "intérieure" de la MenuItem est cliquable:

le texte d'alt http://tanguay.info/web/external/mvvmMenuItems.png

Dans mon Vue j'ai ce menu:

<Menu>
    <MenuItem 
        Header="Options" ItemsSource="{Binding ManageMenuPageItemViewModels}"
              ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>

Puis-je lier avec ce DataTemplate:

<DataTemplate x:Key="MainMenuTemplate">
    <MenuItem
        Header="{Binding Title}" 
        Command="{Binding DataContext.SwitchPageCommand,
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}" 
        Background="Red"
        CommandParameter="{Binding IdCode}"/>
</DataTemplate>

Depuis chaque ViewModel dans l'ObservableCollection ManageMenuPageItemViewModels a une propriété Titre et IdCode, le code ci-dessus fonctionne très bien à première vue.

CEPENDANT, le problème est que le MenuItem dans le DataTemplate est en fait à l'intérieur de un autre MenuItem (comme si c'est lié à deux reprises) ainsi que dans les au-dessus de DataTemplate avec Background="Rouge" il y a un boîte Rouge à l'intérieur de chaque élément de menu et uniquement cette zone peut être cliqué, pas l'ensemble de la zone élément de menu lui-même (par exemple, si l'utilisateur clique sur la zone où le champ est ou vers la droite ou la gauche de l'intérieur de la zone cliquable, puis rien ne se passe, qui, si vous n'avez pas de couleur est très déroutant.)

Quelle est la bonne manière de lier MenuItems à une ObservableCollection des ViewModels, de sorte que l'ensemble de la zone à l'intérieur de chaque MenuItem est cliquable?

Mise à JOUR:

J'ai donc fait les modifications suivantes sont fondées sur des conseils ci-dessous et avoir cette:

le texte d'alt http://tanguay.info/web/external/mvvmMenuItemsYellow.png

Je n'ai qu'un TextBlock à l'intérieur de mon DataTemplate, mais je ne peux toujours pas "la couleur de l'ensemble de la MenuItem" mais juste le TextBlock:

<DataTemplate x:Key="MainMenuTemplate">
    <TextBlock Text="{Binding Title}"/>
</DataTemplate>

Et j'ai mis de la liaison de Commande dans le Menu.ItemContainerStyle mais ils n'ont pas le feu maintenant:

<Menu DockPanel.Dock="Top">
    <Menu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="Command" Value="{Binding DataContext.SwitchPageCommand,
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"/>
            <Setter Property="CommandParameter" Value="{Binding IdCode}"/>
        </Style>
    </Menu.ItemContainerStyle>
    <MenuItem 
        Header="MVVM" ItemsSource="{Binding MvvmMenuPageItemViewModels}"
              ItemTemplate="{StaticResource MainMenuTemplate}"/>
    <MenuItem 
        Header="Application" ItemsSource="{Binding ApplicationMenuPageItemViewModels}"
              ItemTemplate="{StaticResource MainMenuTemplate}"/>
    <MenuItem 
        Header="Manage" ItemsSource="{Binding ManageMenuPageItemViewModels}"
              ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>

OriginalL'auteur Edward Tanguay | 2009-07-01