Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于子菜单项状态的菜单项可见性_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 基于子菜单项状态的菜单项可见性

C# 基于子菜单项状态的菜单项可见性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个基于MVVM的WPF上下文菜单,希望将菜单项的可见性绑定到其子菜单项的IsEnabled属性。问题是:根菜单项始终可见,即使所有子菜单项都已禁用。但是在菜单项上移动光标会使它隐藏,我真的不知道为什么 以下是我的xaml代码: 还有我的转换器的代码 public类anybooltVisibilityConverter:IMultiValueConverter { /// /// /// /// /// /// /// /// 公共对象转换(对象[]值,类型target

我有一个基于MVVM的WPF上下文菜单,希望将菜单项的可见性绑定到其子菜单项的
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没有提前养大。尝试手动引发事件吗?你应该将此标记为一个答案,我认为:)调查得不错。你应该将此标记为一个答案,我认为:)调查得不错。