将 ContextMenu 的 MenuItem 可见性绑定到 ListView 选择
Posted
技术标签:
【中文标题】将 ContextMenu 的 MenuItem 可见性绑定到 ListView 选择【英文标题】:Bind ContextMenu's MenuItem visibility to ListView selection 【发布时间】:2010-11-04 13:01:55 【问题描述】:我有一个带有 ListView 的用户控件,其中包含来自 ObservableCollection 的简单项目。我希望该 ListView 的 ContextMenu 包含取决于在 ListView 中选择的项目。如果未选择任何项目,则某些 MenuItems 不应可见。
当我打开 ContextMenu 时,甚至没有调用我的转换器。绑定好像有问题,我在输出窗口找到这个:
System.Windows.Data 错误:4:找不到与引用“ElementName=listView”进行绑定的源。绑定表达式:路径=选定项;数据项=空;目标元素是'MenuItem'(名称='');目标属性是“可见性”(类型“可见性”)
我不明白哪里出了问题,也无法通过网络搜索。
下面是一些简化的代码:
<UserControl x:Class="MyApp.DatabaseControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:MyApp"
Height="Auto"
Width="Auto">
<UserControl.Resources>
<l:ValueToVisibilityConverter x:Key="valueToVisibility" />
</UserControl.Resources>
<Grid>
<ListView x:Name="listView" ItemsSource="Binding Persons">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="First Name" DisplayMemberBinding="Binding FirstName"/>
<GridViewColumn Width="140" Header="Last Name" DisplayMemberBinding="Binding LastName" />
</GridView>
</ListView.View>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem
Header="Open"
Visibility="Binding SelectedItem, ElementName=listView, Converter=StaticResource valueToVisibility"/>
<Separator/>
<MenuItem Header="Add..."/>
<MenuItem Header="Remove"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
</Grid>
非常感谢!
【问题讨论】:
【参考方案1】:问题是ContextMenu
与ListBox
不在同一个可视化树中,因此绑定找不到ListBox
。如果你绑定PlacementTarget
,那应该可以解决问题:
<MenuItem Header="Open"
Visibility="Binding RelativeSource=RelativeSource FindAncestor,
AncestorType=ContextMenu, Path=PlacementTarget.SelectedItem,
Converter=StaticResource valueToVisibility" />
【讨论】:
如果这回答了您的问题,您应该将其标记为已接受,以便它不再显示为未回答的问题。以上是关于将 ContextMenu 的 MenuItem 可见性绑定到 ListView 选择的主要内容,如果未能解决你的问题,请参考以下文章
WPF ContextMenu DataTemplate MenuItem Visibility 问题
menuitem和contextmenu crossbrowser兼容性
如何在 ContextMenu 中使用 MenuItem.setIntent()
WPF ContextMenu:MenuItem 图标可见性绑定错误
WPF ContextMenu 和 MenuItem 无法在默认样式 WPF 中设置 OverridesDefaultStyle 属性