ViewerSupport.bind() 可以与图像结合使用吗?



在我的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.IValueProperty s?

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);
}

最新更新