Eclipse plugin 基于ViewPart(而非透视图)中的选择启用/禁用工具栏命令

Eclipse plugin 基于ViewPart(而非透视图)中的选择启用/禁用工具栏命令,eclipse-plugin,eclipse-rcp,selection,toolbar,Eclipse Plugin,Eclipse Rcp,Selection,Toolbar,我有一个由多个ViewParts组成的透视图。其中一个ViewParts使用menuContribution和locationURI=“toolbar:…”分配了一个命令 带有工具栏命令的ViewPart仅包含一个子项(一个TreeView),并且在其createPartControl(Composite)-方法中执行this.getSite().setSelectionProvider(子项) 问题是,当我在透视图中单击另一个ViewParts时,该命令被禁用,但在TreeView-组件中,该

我有一个由多个
ViewPart
s组成的透视图。其中一个
ViewPart
s使用
menuContribution
locationURI=“toolbar:…”
分配了一个命令

带有工具栏命令的
ViewPart
仅包含一个子项(一个
TreeView
),并且在其
createPartControl(Composite)
-方法中执行
this.getSite().setSelectionProvider(子项)

问题是,当我在透视图中单击另一个
ViewPart
s时,该命令被禁用,但在
TreeView
-组件中,该选择不起作用。 我猜
启用when
-条件不再有效,因为
选择
-变量现在指向另一个ViewPart中的阻力

这会分散注意力,因为当选择
TreeView
中的有效行时,工具栏按钮应该被激活

我如何告诉我的核心表达式,它应该只检查工具栏拒绝进入的
ViewPart
的选择,而不检查全局选择


我也遇到了类似的问题,最终我实现了自己的property tester。这可能是最简单的方法,因为预定义的
选择
变量将始终指向全局选择

大致上,您需要遵循以下步骤

  • org.eclipse.core.expressions
    插件添加到依赖项中

  • org.eclipse.core.expressions.propertyTests
    扩展点定义扩展。这将类似于以下内容():

  • 在enabledWhen子句中使用实现的属性测试程序

     <enabledWhen>
        <test
              property="your.namespace.itemSelected">
        </test>
     </enabledWhen>
    
    
    
  • public class CodeSelectionPropertyTester extends PropertyTester {
        @Override
        public boolean test(Object receiver, String property,
                Object[] args, Object expectedValue) {
            if (property.equals("itemSelected")) {
                // write your own code to test
                // whether there is a valid selection...
            }
    
            // ...
        }
    }
    
     <enabledWhen>
        <test
              property="your.namespace.itemSelected">
        </test>
     </enabledWhen>