2009-10-16 7 views
20

Eventuali duplicati:
Specify Command for MenuItem in a DataTemplateContextMenu WPF con ItemsSource - come associare a Command in ogni elemento?

Ho una collezione di oggetti (ViewModels) che rappresentano le voci di menu. Ognuno di loro ha un comando che vorrei eseguire quando si fa clic su MenuItem.

Se volevo fare il menu in modo statico, lo faccio in questo modo:

<ContextMenu> 
    <MenuItem Header="{Binding Text1}" Command={Binding Command1}> 
    <MenuItem Header="{Binding Text2}" Command={Binding Command2}> 
</ContextMenu> 

ma quando non conosco gli elementi di anticipo (provengono da una collezione), ho bisogno di assegnare ContextMenu .ItemsSource - e metti un testo in un ItemTemplate.

<ContextMenu ItemsSource="{Binding MyMenuItems}"> 
    <ContextMenu.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Text2}" /> <!-- But where to put Command binding? TextBlock.Command makes no sense, and we have no access to MenuItem! --> 
     </DataTemplate> 
    </ContextMenu.ItemTemplate> 
</ContextMenu> 

In questo modo, però, non ho posto per associare un comando a - perché non riesco a ottenere il MenuItem per ogni riga!

Qualche consiglio, per favore? Grazie ragazzi!

+0

Un duplicato di [http://stackoverflow.com/questions/898852/specify-command-for-menuitem-in-a-datatemplate](http://stackoverflow.com/questions/898852/specify-command- per-menuitem-in-a-DataTemplate). –

risposta

29
<ContextMenu.ItemContainerStyle> 
    <Style TargetType="MenuItem"> 
    <Setter Property="Command" Value="{Binding AssociatedCommand}" /> 
    </Style> 
</ContextMenu.ItemContainerStyle> 

dove AssociatedCommand è la proprietà sull'oggetto viewmodel che contiene ICommand.

+0

Grazie, ho già trovato la stessa risposta nella discussione collegata ... –

+5

Come separo i comandi per le due voci di menu. – TrustyCoder

+0

Come si separano i comandi per più voci di menu? Diciamo "Aggiungi" e "Rimuovi". –

Problemi correlati