c# - 当 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
.
解决方案
首先,将你的移动ContextMenu
到资源,然后将它应用到a中的ListView
's ,基于是否是:ContextMenu
DataTrigger
SelectedItem
null
<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>
推荐阅读
- javascript - 当父级重新渲染时,连接的 React 组件不必要地重新渲染
- scala - 连接 RDD[(Long, Array[Byte])] 和具有 Long 字段的案例类的 RDD
- talend - 如何在talend中执行条件重复数据删除
- sql - Where 子句在 Teradata 上无法正常工作的案例?
- ruby-on-rails - Rails ActiveStorage / Cloudinary 未将图像请求重定向到 HTTPS
- react-native - 在 React Native 上运行最新版本的 Auto Desk Viewer - Cookie 错误
- java - Is there a Java library to programmatically remove parts of an .mp3 audio file?
- dapper - 小巧玲珑有什么问题?
- django - 如何将表单集成到详细视图中?
- java - 在 unity3d 中调用 Java 方法