当ListView中没有项目或未选择任何项目时,是否可以禁用ContextMenu?

时间:2019-11-20 18:49:31

标签: c# wpf listview contextmenu

我使用了以下方法:

<ListView x:Name="itemsListView" ItemsSource="{Binding MyItems}">
    <ListView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Remove"
        Command="{Binding RemoveItem}"
        CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
        </ContextMenu>
    </ListView.ContextMenu>
</ListView>

由blindmeis here提供,用于创建和绑定ContextMenu,如果我先选择一个项目然后右键单击,它会很好地工作。但是,如果我没有选择任何项目,而是单击ListView中的任意位置,则该项目仍会出现,并使用null调用命令。

2 个答案:

答案 0 :(得分:1)

首先,将ContextMenu移到资源中,然后根据是否{{1}将其应用于ListViewContextMenu的{​​{1}} }}是否为DataTrigger

SelectedItem

答案 1 :(得分:1)

一种方法是在ContextMenu上设置ListViewItem而不是ListView

这将确保ContextMenu仅在有ListViewItem可用时显示。如果未选中该项目,则将在用户右键单击该项目时出现。

这里唯一的技巧是处理DataContext中的ContextMenu问题。这可以通过将Tag的{​​{1}}属性设置为ListViewItem的{​​{1}}来完成。这将允许DataContext绑定到ListView命令。

ContextMenu

我希望这会有所帮助!