2009-10-16 7 views
20

Duplicar posible:
Specify Command for MenuItem in a DataTemplateWPF ContextMenu con ItemsSource - cómo enlazar al comando en cada elemento?

que tiene una colección de objetos (ViewModels) que representan los elementos de menú. Cada uno de ellos tiene un comando que me gustaría ejecutar cuando se hace clic en un MenuItem.

Si lo que quería hacer el menú de forma estática, lo hago de esta manera:

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

pero cuando no sé los elementos de avance (que proceden de una colección), que necesito para asignar ContextMenu .ItemsSource - y poner un texto en una 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> 

De esta manera, sin embargo, no tienen lugar de obligar a un comando - porque no puedo conseguir el Menultem para cada fila!

¿Algún consejo, por favor? ¡Gracias chicos!

+0

Un duplicado de [http://stackoverflow.com/questions/898852/specify-command-for-menuitem-in-a-datatemplate](http://stackoverflow.com/questions/898852/specify-command- for-menuitem-in-a-datatemplate). –

Respuesta

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

donde AssociatedCommand es la propiedad del objeto viewmodel que contiene el ICommand.

+0

Gracias, ya encontré la misma respuesta en el hilo vinculado ... –

+5

¿Cómo separe los comandos para los dos elementos del menú? – TrustyCoder

+0

¿Cómo separe los comandos para los elementos de menú múltiples? Digamos "Agregar" y "Eliminar". –

Cuestiones relacionadas