2009-10-16 2 views
20

Можно создать дубликат:
Specify Command for MenuItem in a DataTemplateWPF ContextMenu with ItemsSource - как связать команду в каждом элементе?

У меня есть коллекция объектов (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 для каждой строки!

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

+0

Дубликат [http://stackoverflow.com/questions/898852/specify-command-for-menuitem-in-a-datatemplate](http://stackoverflow.com/questions/898852/specify-command- для-MenuItem-в-DataTemplate). –

ответ

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

где AssociatedCommand - это свойство объекта viewmodel, содержащего ICommand.

+0

Спасибо, я уже нашел тот же ответ в связанной теме ... –

+5

Как отделить команды для двух пунктов меню. – TrustyCoder

+0

Как отделить команды для нескольких пунктов меню? Скажем, «Добавить» и «Удалить». –

Смежные вопросы