WPF文本菜单用的ItemsSource - 如何绑定到命令中的每个项目? [重复](WPF

2019-08-19 10:37发布

可能重复:
在一个DataTemplate指定命令菜单项

我有一个代表菜单项的对象(的ViewModels)的集合。 他们每个人都有,我想在单击菜单项时执行的命令。

如果我想要做静态菜单,我不喜欢这样写道:

<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>

通过这种方式,但是,我没有地方可命令绑定到 - 因为我不能得到的菜单项的每一行!

有什么建议吗? 感谢你们!

Answer 1:

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

其中AssociatedCommand是保存ICommand设置视图模型对象的属性。



文章来源: WPF ContextMenu with ItemsSource - how to bind to Command in each item? [duplicate]