Xaphann
Xaphann

Reputation: 3677

Root MenuItem Visibility binding

I need to a root MenuItem Collapsed based on a condition. I can get sub - MenuItem of the root menu to Collapsed but not the root.

Background: Based on settings I need to MenuItems to be Visible or Collapsed. This kind of works. For sub MenuItem it works perfectly;

<Menu>
    <MenuItem  Header="Root Menu Item" >
        <MenuItem.Style>
            <Style TargetType="{x:Type MenuItem}" >
                <Setter Property="Visibility" Value="Visible" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Source={StaticResource MyResource}, Path=MySetting, UpdateSourceTrigger=PropertyChanged}" Value="False">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </MenuItem.Style>
        <MenuItem Header="Sub Menu Item">
            <MenuItem.Style>
                <Style TargetType="{x:Type MenuItem}" >
                    <Setter Property="Visibility" Value="Collapsed" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Source={StaticResource MyResource}, Path=MySetting, UpdateSourceTrigger=PropertyChanged}" Value="False">
                            <Setter Property="Visibility" Value="Collapsed" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </MenuItem.Style>
        </MenuItem>
    </MenuItem>
</Menu>

Changing the value for MySetting between true and false makes the "Sub Menu Item" disappear or a appear, but has no effect on the Root Menu Item. I am at a lost as to why.

Upvotes: 0

Views: 388

Answers (1)

user5856424
user5856424

Reputation:

For this simple Binding it's better and easier to use an IValueConverter, e.g. the preincluded BooleanToVisibilityConverter.

Usage example:

<SomeParentElement.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</SomeParentElement.Resources>

<Menu Visibility="{Binding Path=MySetting, 
                           Source={StaticResource MyResource}, 
                           Converter={StaticResource BoolToVisConverter}}" />

Upvotes: 1

Related Questions