Подтвердить что ты не робот

WPF ContextMenu с ItemsSource - как связать команду с каждым элементом?

Возможный дубликат:
Задайте команду для MenuItem в DataTemplate

У меня есть набор объектов (viewmodels), которые представляют элементы меню. У каждой из них есть команда, которую я хотел бы выполнить, когда щелкнут MenuItem.

Если бы я хотел сделать меню статически, я делаю это вот так:

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

но когда я не знаю элементы заранее (они взяты из коллекции), мне нужно назначить ContextMenu.ItemsSource - и поместить текст в 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>

Таким образом, мне некуда привязывать команду - потому что я не могу получить MenuItem для каждой строки!

Любые советы, пожалуйста? Спасибо, ребята!

4b9b3361

Ответ 1

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

где AssociatedCommand является свойством объекта viewmodel, который содержит ICommand.