首页 > 解决方案 > 当 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.

标签: c#wpflistviewcontextmenu

解决方案


首先,将你的移动ContextMenu到资源,然后将它应用到a中的ListView's ,基于是否是:ContextMenuDataTriggerSelectedItemnull

<Window.Resources>
    <ContextMenu x:Key="MyContextMenu">

        <MenuItem Header="Remove"
                  Command="{Binding RemoveItem}"
                  CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
    </ContextMenu>
</Window.Resources>
<Grid>
    <ListView x:Name="itemsListView" ItemsSource="{Binding MyItems}">
        <ListView.Style>
            <Style TargetType="{x:Type ListView}">
                <Setter Property="ContextMenu"
                        Value="{StaticResource MyContextMenu}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedItem, ElementName=itemsListView}"
                                 Value="{x:Null}">
                        <Setter Property="ContextMenu"
                                Value="{x:Null}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.Style>
    </ListView>
</Grid>

推荐阅读