带有ItemsSource的WPF ContextMenu - 如何在每个项目中绑定到Command?

时间:2009-10-16 22:36:09

标签: wpf binding command contextmenu

  

可能重复:
  Specify Command for MenuItem in a 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>

但是,这样,我无法将Command绑定到 - 因为我无法获取每一行的MenuItem!

请问有什么建议吗?谢谢你们,伙计们!

1 个答案:

答案 0 :(得分:31)

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

其中AssociatedCommand是保存ICommand的viewmodel对象的属性。