我有一个带有 ListView 的用户控件,其中包含 ObservableCollection 中的简单项目。我希望该 ListView 的 ContextMenu 包含根据 ListView 中选择的内容的项目。如果未选择任何项目,则某些菜单项不应可见。
当我打开上下文菜单时,我的转换器甚至没有被调用。绑定似乎是错误的,我在输出窗口中发现:
System.Windows.Data 错误:4:找不到引用“ElementName=listView”的绑定源。 BindingExpression:Path=SelectedItem;数据项=空;目标元素是“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>
多谢!
问题是ContextMenu
与 不在同一视觉树中ListBox
,因此绑定找不到ListBox
。如果你绑定PlacementTarget
, 这应该够了吧:
<MenuItem Header="Open"
Visibility="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem,
Converter={StaticResource valueToVisibility}}" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)