You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse e4 RCP:如何在@Evaluate方法中获取关联的MItem?

在Eclipse e4 RCP命令式表达式中获取对应的MItem

可以直接在@Evaluate方法中获取当前触发评估的MItem,不需要遍历整个MApplication查找。核心是通过IEvaluationContext提取上下文里的目标元素,结合你的模式标签需求,实现通用可见性逻辑。

实现步骤与代码示例

  1. 定义通用表达式类
    这个类通过注入评估上下文和当前模式,提取目标MItem并对比标签判断可见性:
import org.eclipse.e4.core.di.annotations.Evaluate;
import org.eclipse.e4.core.di.annotations.Named;
import org.eclipse.e4.core.services.context.IEvaluationContext;
import org.eclipse.e4.ui.model.application.ui.MItem;

public class ModeVisibilityExpression {

    @Evaluate
    public boolean evaluate(IEvaluationContext evalContext, 
                            @Named("current.mode") String activeMode) {
        // 从评估上下文获取当前对应的MItem
        Object targetElement = evalContext.getDefaultVariable();
        if (!(targetElement instanceof MItem)) {
            return false; // 非MItem元素默认隐藏
        }

        MItem targetItem = (MItem) targetElement;
        // 检查当前模式是否在MItem的标签集合中
        for (String tag : targetItem.getTags()) {
            if (tag.equals(activeMode)) {
                return true;
            }
        }
        return false;
    }
}
  1. 模型编辑器配置

    • 对每个需要控制可见性的工具栏/菜单项,在模型编辑器中添加对应模式的标签(比如模式A可见就加标签"A")
    • 找到该项的visible-when属性,选择命令式表达式,绑定到上述ModeVisibilityExpression类
  2. 模式切换时更新上下文
    在切换程序模式的逻辑中,将当前模式存入Eclipse上下文,触发表达式重新评估:

import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;

// 示例:切换到模式A
IEclipseContext appContext = EclipseContextFactory.getServiceContext(getClass().getClassLoader());
appContext.set("current.mode", "A");

关键注意点

  • IEvaluationContext.getDefaultVariable()返回的就是当前触发评估的UI元素(这里是MItem),这是e4表达式评估机制默认传递的上下文变量
  • 如果遇到非MItem的UI元素评估(比如某些容器),可以添加类型判断避免报错
  • 上下文更新后,e4会自动触发所有绑定的命令式表达式重新评估,无需手动刷新UI

内容的提问来源于stack exchange,提问作者bern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:42:36