ViewerSupport.bind() 可以和图片一起使用吗?

Can ViewerSupport.bind() be used in conjunction with images?

在我的 Eclipse RCP 视图中,我使用 JFace 数据绑定将模型数据绑定到 org.eclipse.jface.viewers.TreeViewer。我使用 ViewerSupport.bind() 绑定数据,如代码片段所示,效果很好。

ViewerSupport.bind(viewer, model, BeanProperties.list("children",
          ModelObject.class), BeanProperties.value(ModelObject.class, "name"));

现在我真的很想在节点上显示图像和文本。如果没有数据绑定,我只是重写 LabelProvidergetImage(Object element) 方法,但是内容 + 标签提供程序方法和 ViewerSupport 的使用不能一起工作。我还没有在 ViewerSupport API 中找到解决我的问题的方法。是否有解决方案,也许使用 org.eclipse.core.databinding.property.value.IValuePropertys?

ViewerSupport 使用 ObservableMapLabelProvider 作为标签提供者。不幸的是 getImage 方法只是 returns null.

您或许可以使用 ObservableMapLabelProvider 的子 class 来提供图像。您不能使用 ViewerSupport 来执行此操作,因此您必须复制一些代码。

这就是 ViewerSupport.bind 设置树的方式:

public static void bind(AbstractTreeViewer viewer, Object input,
        IListProperty childrenProperty, IValueProperty[] labelProperties) {
  Realm realm = DisplayRealm.getRealm(viewer.getControl().getDisplay());

  ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
            childrenProperty.listFactory(realm), null);

  if (viewer.getInput() != null)
    viewer.setInput(null);

  viewer.setContentProvider(contentProvider);

  viewer.setLabelProvider(new ObservableMapLabelProvider(Properties
            .observeEach(contentProvider.getKnownElements(),
                    labelProperties)));

  if (input != null)
    viewer.setInput(input);
}