Eclipse rcp 更新Eclipse菜单项启用状态

Eclipse rcp 更新Eclipse菜单项启用状态,eclipse-rcp,Eclipse Rcp,我在“文件”菜单中创建了菜单项作为命令。对于该命令,有一个处理程序实现IHandler接口。此处理程序包含isEnabled方法。我试图使用此方法启用/禁用我的菜单项,但当我单击“文件”菜单时,该方法仅被调用一次。单击第二次、第三次等时,即使我以前更改了页面(打开/关闭编辑器)的状态,也不会再次调用isEnabled方法 我该怎么办?可能此方法不适用于控件菜单项?您是否对org.eclipse.core.commands.AbstractHandler进行子类化?您应该使用setBaseEnab

我在“文件”菜单中创建了菜单项作为命令。对于该命令,有一个处理程序实现
IHandler
接口。此处理程序包含
isEnabled
方法。我试图使用此方法启用/禁用我的菜单项,但当我单击“文件”菜单时,该方法仅被调用一次。单击第二次、第三次等时,即使我以前更改了页面(打开/关闭编辑器)的状态,也不会再次调用
isEnabled
方法


我该怎么办?可能此方法不适用于控件菜单项?

您是否对org.eclipse.core.commands.AbstractHandler进行子类化?您应该使用
setBaseEnabled(boolean)
来更新处理程序的状态(这将更新您的命令)


只有同时触发
HandlerEvent
,才能更改处理程序中的启用状态。调用
setBaseEnabled(boolean)
将为您触发事件通常更容易。

如果您试图启用/禁用菜单,则不应使用核心表达式。 我已经在这个答案中解释了如何做到这一点:

您感兴趣的部分首先是:

用于激活/停用菜单[…]


我希望这就是你要找的

如果我有菜单管理器的句柄,如何以编程方式启用/禁用菜单项?@Neel(在前面提到的示例中)您应该调用CommandState.setNotLoaded(),它将更改变量“myapp.commands.sourceprovider.active”的值未加载,处理程序中的条件将依次检测到。处理程序中的条件表示,如果“myapp.commands.sourceprovider.active”不等于播放或暂停,则按钮应处于非活动状态(因此被禁用)。简而言之,使用provider类(这里是CommandState)来更改触发处理程序的变量的值。