如何在通过HierarchycalDataTemplate wpf生成的菜单项和子菜单项中保留两个不同的命令
在下面的代码中,嵌套菜单是从一个称为CollectionFauthors的可观察集合生成的。我已经放置了两个命令,一个位于“ToplevelMenuItem”,另一个用于子菜单项(通过textblock.InputBindings)。 虽然子菜单项的命令正在工作,但我无法点击TopLevelMenuItem的命令: 需要了解我需要额外做什么吗如何在通过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
<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}}”
让我们来看看。