我正在为ListViewItem样式下定义的ContextMenu命令寻找解决方案。当我在ListView中的ContextMenu中定义并绑定命令时,绑定是成功的。
我使用viewModel类文件来定义命令,例如:ExecuteClone、CanExecuteClone,我正试图使用命令绑定将其与ContextMenu菜单项绑定。
<ListView.ContextMenu>
<ContextMenu >
<MenuItem Header="New" Command="{Binding AddCommand}" />
</ContextMenu>
</ListView.ContextMenu>
但是,当我将ContextMenu从ListView更改为ListViewItem时,它不会命中ViewModel命令。
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="New" Command="{Binding AddCommand}"/>
<MenuItem Header="Clone" Command="{Binding CloneCommand}"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
它需要点击ViewModel AddCommand和CloneCommand,它们是在ViewModel类下定义的DelegateCommand操作。
我通过一些试验找到了答案,无论如何,感谢您的帮助。
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=DataContext}"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<MenuItem Header="New" Command="{Binding AddCommand}"/>
<MenuItem Header="Clone" Command="{Binding CloneCommand}"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
ListViewItems与ListView具有不同的DataContext。每个ListViewItem都将其DataContext设置为ItemsSource集合中的一个项,因此绑定不起作用。如果你想将命令绑定到ListView的DataContext,你可以这样做:
Command="{Binding DataContext.AddCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}"