【问题标题】:How to trigger @CanExecute method on TableViewer selection change如何在 TableViewer 选择更改上触发 @CanExecute 方法
【发布时间】:2015-11-23 17:27:37
【问题描述】:

我有一个带工具栏的部件,还有一个 TableViewer。 Int 工具栏我有一个编辑按钮,只有当表格查看器中的一行被选中时它才应该是活动的。

我在处理程序的 canExecute 方法中添加了一个条件。 我可以看到当我单击某些按钮时该方法会执行,但是当 TableViewer 中的选择发生更改时它不会执行,因此它无法识别工具栏中的编辑按钮应该激活。

也许我可以在 TableViewer 中的选择发生更改时触发@CanExecute 的执行,或者可能有其他方法?

【问题讨论】:

    标签: eclipse-rcp e4


    【解决方案1】:

    您可以使用以下方式执行处理程序:

    @Inject
    ECommandService commandService;
    
    @Inject
    EHandlerService handlerService;
    
    ...
    
    ParameterizedCommand command = commandService.createCommand("command id", Collections.emptyMap());
    
    if (handlerService.canExecute(command)) {
      handlerService.executeHandler(command);
    }
    

    “command id”是您的处理程序正在处理的命令的 id。

    您可以使用以下方式请求更新工具栏:

    @Inject
    IEventBroker eventBroker;
    
    ...
    
    eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, UIEvents.ALL_ELEMENT_ID);
    

    【讨论】:

    • Eclipse 向我显示不鼓励访问并且没有注入任何东西
    • 不鼓励的消息是可以的,部分 e4 API 尚未最终确定,因此您必须取消警告。您必须在注入的类(例如 Part)中运行此代码,或将服务作为参数传递给您的代码。
    • 好的,您已经编写了如何手动运行 canExecute 和执行方法,但我现在如何刷新工具栏?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2018-09-08
    • 2013-10-12
    • 2018-02-16
    • 2020-10-27
    相关资源
    最近更新 更多