在我的Eclipse RCP视图中,我使用JFace数据绑定将模型数据绑定到org.eclipse.jface.viewers.TreeViewer
。我使用 ViewerSupport.bind()
来绑定数据,如片段所示,它工作得很好。
ViewerSupport.bind(viewer, model, BeanProperties.list("children",
ModelObject.class), BeanProperties.value(ModelObject.class, "name"));
现在我真的很想在节点上显示图像和文本。如果没有数据绑定,我只会覆盖LabelProvider
的getImage(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);
}