ViewerSupport.bind()可以与图像一起使用吗?

时间:2016-03-01 11:23:36

标签: eclipse swt eclipse-rcp jface eclipse-databinding

在我的Eclipse RCP View中,我使用JFace数据绑定将模型数据绑定到org.eclipse.jface.viewers.TreeViewer。我使用ViewerSupport.bind()来绑定数据,如片段中所示,它可以正常工作。

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

现在我真的想在节点上显示图像和文本。如果没有数据绑定,我只是覆盖LabelProvider的{​​{1}}方法,但内容+标签提供商方法和getImage(Object element)的使用不起作用一起。我在ViewerSupport API中找不到问题的解决方案。是否有解决方案,可能使用ViewerSupport s?

1 个答案:

答案 0 :(得分:0)

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

您可以使用ObservableMapLabelProvider的子类来提供图像。您无法使用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);
}