C# 基于子菜单项状态的菜单项可见性
我有一个基于MVVM的WPF上下文菜单,希望将菜单项的可见性绑定到其子菜单项的C# 基于子菜单项状态的菜单项可见性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个基于MVVM的WPF上下文菜单,希望将菜单项的可见性绑定到其子菜单项的IsEnabled属性。问题是:根菜单项始终可见,即使所有子菜单项都已禁用。但是在菜单项上移动光标会使它隐藏,我真的不知道为什么 以下是我的xaml代码: 还有我的转换器的代码 public类anybooltVisibilityConverter:IMultiValueConverter { /// /// /// /// /// /// /// /// 公共对象转换(对象[]值,类型target
IsEnabled
属性。问题是:根菜单项始终可见,即使所有子菜单项都已禁用。但是在菜单项上移动光标会使它隐藏,我真的不知道为什么
以下是我的xaml代码:
还有我的转换器的代码
public类anybooltVisibilityConverter:IMultiValueConverter
{
///
///
///
///
///
///
///
///
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
如果(!values.All(val=>val为bool))
返回可见性。折叠;
返回值.Any(val=>(bool)val)?可见性。可见:可见性。折叠;
}
///
///
///
///
///
///
///
///
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
抛出新的NotSupportedException($“ConvertBack不支持{nameof(AnyBoolToVisibilityConverter)}”);
}
}
我希望你们中的一些人能帮助我找到这个问题
非常感谢。在
弹出窗口
调用IsSubmenuOpenChanged
回调并在IsSubmenuOpen
属性更改后调用CommandManager.InvalidateRequerySuggested()
之前,弹出窗口
的项似乎不会评估它们的绑定()
因此,我为根MenuItem
使用了另一个命令来验证所有子菜单命令的执行情况。似乎弹出窗口的项
在弹出窗口调用ISUBmenuOpenChanged
回调并调用之前不会评估它们的绑定CommandManager.invalidateRequestSuggested()
在IsSubmenuOpen
属性更改后()
因此,我为根MenuItem
使用了另一个命令来验证所有子菜单命令的CanExecute。如何更改MenuItem
的IsEnabled
属性?当CanExecute返回一个值时,它由命令绑定更改。这发生在初始化过程中。好的,那么在您的情况下,我们可以静态地将IsEnabled设置为false来重现问题吗?删除命令绑定并静态地将所有子菜单项的IsEnabled属性设置为false。看起来子菜单项的绑定在它们出现之前不会被触摸。你知道为什么吗?可能是因为CanExecuteChanged没有提前养大。可能尝试手动引发事件?如何更改MenuItem
的IsEnabled
属性?当CanExecute返回值时,它由命令绑定更改。这发生在初始化过程中。好的,那么在您的情况下,我们可以静态地将IsEnabled设置为false来重现问题吗?删除命令绑定并静态地将所有子菜单项的IsEnabled属性设置为false。看起来子菜单项的绑定在它们出现之前不会被触摸。你知道为什么吗?可能是因为CanExecuteChanged没有提前养大。尝试手动引发事件吗?你应该将此标记为一个答案,我认为:)调查得不错。你应该将此标记为一个答案,我认为:)调查得不错。