I am using the context menu in the wpf tree, and I'm pretty much sure what I want. Before I explain the problem, let me explain what the XAML definition for the context menu does.
For each menu item in the context menu, we have a command that either disables or enables the menu item based on CanExecute commands. Each command will set the IsEnabled property of the corresponding menu item depending on the result of CanExecute.
The IsEnabled for each menu item is bound to a BooleanToVisibilityConverter, which converts the bool value of IsEnabled to a Collapse or Visible value to bind the visibility property of the menu item. This works fine again, and my menu items show and hide.
Now for the problem. In the XAML below, we have two menu items (addCategoryMenuItem and removeCategoryMenuItem) above the separator. I am trying to use the MultiBinding for the IsEnabled property of these two menu items using a special implementation of IMultiValueConverter (MultiBooleanToVisibilityConverter), so that when two menu items are disabled, I can set the Separator Visibility property to collapse and therefore hide the separator when menu items are disabled.
For the Convert method in my converter (MultiBooleanToVisibilityConverter) the parameter value (object values ββ[]) I get two elements in the array that contain the value "{DependencyProperty.UnsetValue}". They cannot be added to boolean values ββand therefore my Visibility value cannot be worked out.
, - ElementName, MultiBinding. ? RelativeSource. .. . , .
<ContextMenu x:Key="CategoryMenu">
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type Control}">
<Setter Property="Visibility" Value="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToVisibilityConverter}}" />
</Style>
</ContextMenu.ItemContainerStyle>
<ContextMenu.Items>
<MenuItem x:Name="addCategoryMenuItem" Header="add category" Command="{Binding AddCategory}">
<MenuItem.Icon>
<Image Source="/Images/add.png" Width="16" Height="16" />
</MenuItem.Icon>
</MenuItem>
<MenuItem x:Name="removeCategoryMenuItem" Header="remove category" Command="{Binding RemoveCategory}">
<MenuItem.Icon>
<Image Source="/Images/remove.png" Width="16" Height="16" />
</MenuItem.Icon>
</MenuItem>
<Separator>
<Separator.Visibility>
<MultiBinding Converter="{StaticResource multiBooleanToVisibilityConverter}">
<Binding Mode="OneWay" ElementName="addCategoryMenuItem" Path="IsEnabled" />
<Binding Mode="OneWay" ElementName="removeCategoryMenuItem" Path="IsEnabled" />
</MultiBinding>
</Separator.Visibility>
</Separator>
<MenuItem x:Name="refreshCategoryMenuItem" Header="refresh" Command="{Binding RefreshCategory}">
<MenuItem.Icon>
<Image Source="/Images/refresh.png" Width="16" Height="16" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu.Items>
</ContextMenu>