【问题标题】:Can ViewerSupport.bind() be used in conjunction with images?ViewerSupport.bind() 可以与图像一起使用吗?
【发布时间】:2016-03-01 20:23:48
【问题描述】:

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

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?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我自己真的应该想到这一点,谢谢。缺乏面向对象的思想。遗憾的是这些方法是 static,会使扩展变得如此容易。
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多