WPF ContextMenu con ItemsSource: ¿cómo enlazar con el comando en cada elemento?
binding command (1)
Posible duplicado:
Especifique el comando para MenuItem en un DataTemplate
Tengo una colección de objetos (modelos de vista) que representan elementos de menú. Cada uno de ellos tiene un comando que me gustaría ejecutar cuando se hace clic en un MenuItem.
Si quisiera hacer el menú estáticamente, lo hago así:
<ContextMenu>
<MenuItem Header="{Binding Text1}" Command={Binding Command1}>
<MenuItem Header="{Binding Text2}" Command={Binding Command2}>
</ContextMenu>
pero cuando no conozco los elementos con anticipación (provienen de una colección), debo asignar ContextMenu.ItemsSource y colocar 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 tengo lugar para enlazar un comando a, ¡porque no puedo obtener el elemento de menú para cada fila!
¿Algún consejo, por favor? ¡Gracias chicos!
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding AssociatedCommand}" />
</Style>
</ContextMenu.ItemContainerStyle>
donde AssociatedCommand es la propiedad en el objeto viewmodel que contiene el ICommand.