如何在通过HierarchycalDataTemplate wpf生成的菜单项和子菜单项中保留两个不同的命令

如何在通过HierarchycalDataTemplate wpf生成的菜单项和子菜单项中保留两个不同的命令,wpf,mvvm,data-binding,menu,command,Wpf,Mvvm,Data Binding,Menu,Command,在下面的代码中,嵌套菜单是从一个称为CollectionFauthors的可观察集合生成的。我已经放置了两个命令,一个位于“ToplevelMenuItem”,另一个用于子菜单项(通过textblock.InputBindings)。 虽然子菜单项的命令正在工作,但我无法点击TopLevelMenuItem的命令: 需要了解我需要额外做什么吗 <MenuItem x:Name="TopLevelMenuItem" Header="Authors" ItemsSource="{Binding

在下面的代码中,嵌套菜单是从一个称为CollectionFauthors的可观察集合生成的。我已经放置了两个命令,一个位于“ToplevelMenuItem”,另一个用于子菜单项(通过textblock.InputBindings)。 虽然子菜单项的命令正在工作,但我无法点击TopLevelMenuItem的命令:

需要了解我需要额外做什么吗

<MenuItem x:Name="TopLevelMenuItem" Header="Authors" ItemsSource="{Binding CollectionOfAuthors}"  Command="{Binding DataContext.RefreshAuthorsList, RelativeSource={RelativeSource AncestorType=Menu}}"     >
    <MenuItem.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Books}">
            <TextBlock Text="{Binding AuthorName}"/>
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding BookName}" >
                                    <TextBlock.InputBindings>
                                                        <MouseBinding Command="{Binding DataContext.NavigateToBook, RelativeSource={RelativeSource AncestorType=Menu}}"  MouseAction="LeftClick" />                                                                                                                  
                                   </TextBlock.InputBindings>
                    </TextBlock>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </MenuItem.ItemTemplate>
</MenuItem>

尝试使用

<MenuItem x:Name="TopLevelMenuItem" Header="Authors" ItemsSource="{Binding CollectionOfAuthors}" >
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="SubmenuOpened">
      <i:InvokeCommandAction Command="{Binding DataContext.RefreshAuthorsList}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>

若要防止从子菜单触发命令,则需要将
{Binding.}
传递给命令,若param不是ViewModel的类型,则不要触发操作

此外,还需要添加对System.Windows.Interactive和的引用
xmlns:i=“clr名称空间:System.Windows.Interactivity;assembly=System.Windows.Interactivity”
在您的xaml标题中

非常感谢。它现在正在点击命令,但我需要左键单击两下才能打开菜单。@user42067我编辑了我的解决方案以处理打开的子菜单,而不是MouseleftClick。我尝试了这一点,现在命令再次没有被触发(无论是单次左键单击还是双次左键单击)@user42067是否有任何绑定错误?也许可以尝试使用RelativeSource
命令=“{Binding DataContext.RefreshAuthorsList,RelativeSource={RelativeSource AncestorType=Menu}}”
让我们来看看。