Furnes
Furnes

Reputation: 382

Change context menu in xaml

I've got a view with two large context menus defined as resouces. They look something like this (only larger) :

<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>

I know that I can dynamically show / hide items with the canExecute method of the command. But since this is two completely different modes I would like to just Bind to a bool property that decides which context menu to display. Something like this:

<ListView ContextMenu={binding ContextMenuSelector}>

Does anyone know how I can do something like that ?

Upvotes: 0

Views: 1339

Answers (2)

Furnes
Furnes

Reputation: 382

I got a few good ideas from the DataTemplateSelector, but I ended up with a style with data trigger:

 <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>

Upvotes: 2

Scott Nimrod
Scott Nimrod

Reputation: 11595

Consider using a DataTemplateSelector.

The DataTemplateSelector enables you to display specific presentations based on the context of each datacontext item within your itemscontrol.

I have used it for context menu items that may differin behavior.

Upvotes: 3

Related Questions