TreeViewer到GridTreeViewer:现有ITreeContentProviders和"lazy"ObservableListTreeContentProvider之间的桥梁

Sk8*_*ter 10 swt eclipse-plugin jface eclipse-databinding nebula

TL; DR

基于托马斯Schindl的文章JFace的,浏览器和Eclipse数据绑定与> 10.000对象(这表明一个很好的想法),我想转换一个普通TreeViewer+多次ITreeContentProvider实现到星云GridTreeViewer,它使用ObservableListTreeContentProvider,一个VisibleRangeChangedListenerEclipse数据绑定,以使它"懒惰"(lazier)并按需加载数据.

我应该如何重写我现有的常规ITreeContentProvider实现以使用相同的层次结构ObservableListTreeContentProvider?我可以在旧解决方案和新解决方案之间建立"桥梁"吗?使用DelegatingListProperty某种程度上像这样?还有其他想法吗?
我发现了一些过于简单的例子,但我并没有真正理解在这种复杂的分层树格式中使用数据绑定的概念.

示例树和内容提供者:

内容提供者1:

|- A1
   |-- B1
       |-- MyMessage1
|- A2
   |-- B2
       |-- MyMessage2
Run Code Online (Sandbox Code Playgroud)

内容提供商2:

|- C1
   |-- D1
       |-- MyMessage1
|- C2
   |-- D2
       |-- MyMessage2
Run Code Online (Sandbox Code Playgroud)

更长的解释

我有一个视图,我使用带有经典和+ 实现的自定义以分层格式显示大量对象.还有一个菜单,用户可以选择以何种格式显示此层次结构.当用户选择另一种显示格式时,唯一发生的事情是将另一个实现设置为查看器并以编程方式刷新查看器. 它的工作原理,但由于元素数量巨大(在某些情况下,100-200k行,请不要问原因,只需要工作),显示项目可能很,UI有时会冻结,因为那里在TreeItems上有如此多的监听器,视图刷新需要花费大量时间等等......TreeViewerITreeContentProviderLabelProviderITableLabelProviderITreeContentProvider

所以我想在已经加载到内存中的模型元素的同时使用某种懒惰的解决方案.
我已经试过SWT.VIRTUALILazyTreeContentProvider,但很糟糕执行(即使使用viewer.setUseHashlookup(true)),是有问题的(滚动的时候,我花了很多的时间TreeItems加载,有它的缺陷,与排序,筛选等方面的问题).

现在我阅读Thomas Schindl的博客文章:JFace-Viewer和带有> 10.000对象的Eclipse Databinding.我想试试这个使用Eclipse的星云电网GridTreeViewer和+ ObservableListTreeContentProvider(这也是一个ITreeContentProvider实现)和VisibleRangeChangedListener和'懒惰’的标签供应商(如在文章中).我可以以某种方式使用我现有的ITreeContentProvider实现并在这个和新的之间建立一个"桥梁" ObservableListTreeContentProvider吗?


BTW我检查过Nebula NatTable,但我发现将现有的内容提供商迁移到这个新的解决方案非常困难,它的API和它的方法完全不同(层次结构从子节点到父节点,而不是相反的方式),以及与之相关的文档树木仍然是空的.

Yaz*_*aza 0

星云不久前已经使网格虚拟化了。以下是查看器的片段,其中包含惰性内容提供者的一些示例。

http://git.eclipse.org/c/nebula/org.eclipse.nebula.git/tree/examples/org.eclipse.nebula.snippets/src/org/eclipse/nebula/snippets/grid/viewer