У меня есть контекстное меню WPF на основе MVVM, и я хочу связать видимость элемента меню со свойством IsEnabled
его пунктов подменю. Проблема в том, что root MenuItem
всегда виден, даже когда все дочерние пункты меню отключены. Но перемещение курсора по пункту меню скрывает его, и я действительно понятия не имею, почему.
Вот мой код xaml:
<MenuItem x:Name="SelectionMenuItem" Header="{x:Static language:CommonRes.Selection}">
<MenuItem.Visibility>
<MultiBinding Converter="{StaticResource AnyBoolToVisibilityConverter}">
<Binding
ElementName="SelectGroupMenuItem"
Mode="OneWay"
Path="IsEnabled" />
<Binding
ElementName="SelectGraphMenuItem"
Mode="OneWay"
Path="IsEnabled" />
</MultiBinding>
</MenuItem.Visibility>
<MenuItem
x:Name="SelectGroupMenuItem"
Command="{Binding SelectGroupCommand}"
Header="{x:Static language:CommonRes.Group}"
Visibility="{Binding IsEnabled, Converter={StaticResource BoolToVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
<MenuItem
x:Name="SelectGraphMenuItem"
Command="{Binding SelectGraphCommand}"
Header="{x:Static language:CommonRes.ObjectGraph}"
Visibility="{Binding IsEnabled, Converter={StaticResource BoolToVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
</MenuItem>
и код моего конвертера
public class AnyBoolToVisibilityConverter : IMultiValueConverter
{
/// <summary>
///
/// </summary>
/// <param name="values"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if(!values.All(val => val is bool))
return Visibility.Collapsed;
return values.Any(val => (bool)val) ? Visibility.Visible : Visibility.Collapsed;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="targetTypes"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException($"ConvertBack not Supported for {nameof(AnyBoolToVisibilityConverter)}");
}
}
Я надеюсь, что некоторые из вас могут помочь мне найти проблему.
Большое спасибо.