0

我有一个由多个ViewParts 组成的透视图。其中一个ViewParts 有一个使用menuContributionwith分配的命令locationURI="toolbar:..."

带有 Toolbar-Command的ViewPart仅包含一个 Child (a TreeView) 并且this.getSite().setSelectionProvider(child)在它的createPartControl(Composite)-Method 中执行。

问题是,当我ViewPart在我的 Perspective 中单击其他 s 之一时,该命令被禁用,但选择在TreeView-Component 中确实存在抵抗。我猜-ConditionenabledWhen不再有效,因为selection-Variable 现在指向在另一个 ViewPart 中抵抗的东西。

This distracts, because the Toolbar-Button should be activated, when a valid row in the TreeViewis selected.

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

在此处输入图像描述

4

1 回答 1

0

我有一个类似的问题,我最终做的是实现我自己的属性测试器。这可能是最简单的方法,因为预定义selection变量将始终指向全局选择。

大致而言,您需要按照以下步骤操作。

  1. org.eclipse.core.expressions插件添加到您的依赖项。

  2. org.eclipse.core.expressions.propertyTesters为扩展点定义扩展。这看起来类似于以下内容(文档链接):

    <extension
         point="org.eclipse.core.expressions.propertyTesters">
      <propertyTester
            class="your.package.TreeItemSelectionPropertyTester"
            id="your.package.treeItemSelectionPropertyTester"
            namespace="your.namespace"
            properties="itemSelected"
            type="java.lang.Object">
      </propertyTester>
    </extension>
    
  3. 实现您的 PropertyTester 代码。正如上面的文档所说,该类应该是公共的并且应该扩展org.eclipse.core.expressions.PropertyTester类。

    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...
            }
    
            // ...
        }
    }
    
  4. 在您的 enabledWhen 子句中使用已实现的属性测试器。

     <enabledWhen>
        <test
              property="your.namespace.itemSelected">
        </test>
     </enabledWhen>
    
于 2013-08-21T00:11:53.497 回答