wpf datatemplate command

wpf - Especifique el comando para MenuItem en un DataTemplate



command (2)

Tengo un menú contextual. Está vinculado a alguna colección y tiene una plantilla de elemento definida como esta:

<ContextMenu ItemsSource={Binding ...} ItemTemplate={StaticResource itemTemplate} />

itemTemplate es un DataTemplate simple con un TextBlock:

<DataTemplate x:Key="itemTemplate"> <TextBlock Text={Binding ...} /> </DataTemplate>

¿Cómo puedo vincular la propiedad de Comando para MenuItem a la propiedad del objeto subyacente?


Aunque esto es solo una pequeña variación en la respuesta de Martin Harris, pensé que lo compartiría de todos modos. Me pareció más útil especificar un solo comando para toda la colección y también enviar a lo largo de un CommandParameter:

<MenuItem.ItemContainerStyle> <Style TargetType="MenuItem"> <Setter Property="Command" Value="{x:Static v:ViewModel.CommandForAll}"/> <Setter Property="CommandParameter" Value="{Binding ValueForCommand}"/> </Style> </MenuItem.ItemContainerStyle>

Luego puede determinar qué hacer en el controlador para el comando:

private void CommandForAll_Executed(object sender, ExecutedRoutedEventArgs e) { var cmdParam = e.Paramater as ExpectedType if (cmdParam != null) //DoStuff... }


Creo que necesitas envolver tu TextBlock en un MenuItem:

<DataTemplate x:Key="itemTemplate"> <MenuItem Command={Binding ...}> <TextBlock Text={Binding ...} /> </MenuItem> </DataTemplate>

Pero no tengo un IDE frente a mí ahora mismo para intentar esto. Déjame saber como va.

Parece que necesitas usar el ItemContainerStyle como se ve here . Lo siento por guiarte por el camino equivocado al principio, pero me encontré frente a un IDE y esto funciona:

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