WPF中的ItemsSource上下文菜单-如何将每个项绑定到命令?

22

可能重复:
在DataTemplate中指定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!

请问有什么建议吗?谢谢大家!


一个重复的问题:https://dev59.com/pnNA5IYBdhLWcg3wmfEa。 - Tomáš Kafka
1个回答

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

AssociatedCommand是ViewModel对象上保存ICommand的属性。


谢谢,我已经在链接的帖子中找到了相同的答案... - Tomáš Kafka
5
我该如何分别为这两个菜单项设置命令? - TrustyCoder
我该如何为多个菜单项分离命令?比如说,“添加”和“移除”。 - Matthis Kohli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接