我有一个视图,其中两个大的上下文菜单被定义为resouces。他们看起来像这样(只有更大):
<ContextMenu x:Key="ContextMenu1">
<MenuItem Header="Append" Command="{Binding AppendCommand}" />
<MenuItem Header="Edit" Command="{Binding AppendCommand}" />
</ContextMenu>
<ContextMenu x:Key="ContextMenu2">
<MenuItem Header="Delete" Command="{Binding DeleteCommand}" />
<MenuItem Header="Verify" Command="{Binding VerifyCommand}" />
</ContextMenu>
我知道我可以使用命令的canExecute方法动态显示/隐藏项目。但由于这是两个完全不同的模式,我想绑定到bool属性,决定显示哪个上下文菜单。像这样:
<ListView ContextMenu={binding ContextMenuSelector}>
有谁知道我怎么能这样做?
答案 0 :(得分:3)
考虑使用DataTemplateSelector。
DataTemplateSelector使您可以根据itemscontrol中每个datacontext项的上下文显示特定的演示文稿。
我已经将它用于可能会有不同行为的上下文菜单项。
答案 1 :(得分:1)
我从DataTemplateSelector得到了一些好主意,但我最后得到了一个带数据触发器的样式:
<Style TargetType="{x:Type StackPanel}" x:Key="stackPanelStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AppendMode}" Value="True">
<Setter Property="ContextMenu" Value="{DynamicResource PanelContextMenuAttachFile}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=AppendMode}" Value="False">
<Setter Property="ContextMenu" Value="{DynamicResource PanelContextMenu}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>