我在Eclipse Luna RCP中遇到了一个命令处理程序问题。
在我的E4应用程序模型中,我定义了一些必须启用的命令和相关处理程序只有在某些情况下。因此,在我的处理程序pojo中,我实现了方法用@CanExecute
注释,我检查所需的条件。
我还定义了与这些命令相关联的菜单和工具栏项。
问题是我的@CanExecute
方法没有被正确调用,因此,菜单和工具栏项没有相应地启用/禁用。
特别地,对于菜单项,@CanExecute
方法只在应用程序启动时被调用几次,之后就再也不会调用了。
对于工具栏项,相反,@CanExecute
方法仅在活动上下文更改时调用(例如,当更改活动部分或打开新shell时)。
在开普勒中,行为完全不同(并按预期工作):
- 对于菜单项,每次显示菜单时调用
@CanExecute
方法 - 对于工具栏项,有一个计时器每400ms调用一次
@CanExecute
方法
这是Luna中已知的bug吗?你知道有什么方法可以达到预期的效果吗?
谢谢!
这是Eclipse Luna在bug 427465和436755中描述的设计更改
你可以使用下面的命令来运行@CanExecute方法:
eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, UIEvents.ALL_ELEMENT_ID);
'eventBroker'是IEventBroker
.