【发布时间】:2021-12-20 14:56:29
【问题描述】:
我在 WPF 中有一个包含以下项目的上下文菜单:
<ContextMenu x:Key="MyContextMenu">
<MenuItem Header="{x:Static localization:Resources.MyContext_Command1}" Command="{Binding Command1}" />
<MenuItem Header="{x:Static localization:Resources.MyContext_Command2}" Command="{Binding Command2}" />
<Separator />
<MenuItem Header="{x:Static localization:Resources.MyContext_Command3}" Command="{Binding Command3}" Visibility="{Binding IsItemActive, Converter={converters:BooleanToVisibilityConverter}}" />
<MenuItem Header="{x:Static localization:Resources.MyContext_Command4}" Command="{Binding Command4}" Visibility="{Binding IsItemActive, Converter={converters:BooleanToVisibilityConverter}}" />
<Separator Visibility="{Binding IsItemActive, Converter={converters:BooleanToVisibilityConverter}}"/>
</ContextMenu>
使用上面的代码,这些菜单项(Command3 和 Command4)在 IsItemActive = false 时显示为灰色(禁用),在 IsItemActive = true 时显示为黑色(启用)。但我希望我的菜单项(Command3 和 Command4)以及分隔符从基于“IsItemActive”的上下文菜单中消失/出现。我怎样才能做到这一点?
【问题讨论】:
-
最简单的方法是将集合绑定到您的 ContextMenu。在您的 ViewModel 中,您可以控制绑定的对象。您从 observable 集合中添加/删除项目,您的 ContextMenu 将按预期显示。这是最简单也是最好的处理方式。
-
在您看来,您正在尝试基于属于 ItemsControl(GridView 或 ListBox)中某个项目的 IsItemActive 属性来定义 Visibility。在这种情况下,请注意 MenuItem 的 DataContext。可能您需要使用 RelativeSource 或 ElementName 来更改 Visibility 属性中的绑定源。
-
我们需要查看更多代码。例如,如果您手动将它们设置为
Visibility="Collapsed"会发生什么?
标签: c# wpf xaml data-binding