TL;博士
基于 Thomas Schindl 的文章 JFace-Viewer and Eclipse Databinding with > 10.000 Objects (这表明一个非常好的主意),我想转换一个常规的 TreeViewer
+ 多个 ITreeContentProvider
Nebula's GridTreeViewer
的实现使用 ObservableListTreeContentProvider
, 一个 VisibleRangeChangedListener
和 Eclipse Data Binding至使其“懒惰”(懒惰)并按需加载数据 .
我应该如何重写我现有的常规 ITreeContentProvider
使用与 ObservableListTreeContentProvider
相同的层次结构的实现?
我可以在新旧解决方案之间架起一座“桥梁”吗?
使用 DelegatingListProperty
有点像 this ?还有其他想法吗?
我发现了一些过于简单的例子,但我并没有真正理解在如此复杂的分层树格式中使用数据绑定(bind)的概念。
示例树和内容提供者:
内容提供者 1.:
|- A1
|-- B1
|-- MyMessage1
|- A2
|-- B2
|-- MyMessage2
内容提供者 2.:
|- C1
|-- D1
|-- MyMessage1
|- C2
|-- D2
|-- MyMessage2
更长的解释
我有一个显示 的 View 大量对象在分层 树 使用自定义格式
TreeViewer
经典ITreeContentProvider
和 LabelProvider
+ ITableLabelProvider
实现。还有一个菜单,用户可以在其中选择他们希望以哪种格式显示此层次结构。当用户选择另一种显示格式时,唯一发生的事情是另一个 ITreeContentProvider
实现设置为查看器,我以编程方式刷新查看器。它可以工作,但是由于元素数量巨大(在某些情况下,100-200k 行,请不要问原因,它必须工作),显示项目可以是慢 ,UI有时会死机,因为TreeItems上有太多的监听器, View 刷新需要很多时间等等......
所以我想使用某种 懒人解决方案同时将模型元素加载到内存中。
我已经尝试过
SWT.VIRTUAL
and ILazyTreeContentProvider
,但它表现不佳(即使使用 viewer.setUseHashlookup(true)
)并且存在问题(滚动时,TreeItems 需要很长时间才能加载,有它的 bugs ,排序,过滤等问题)。现在我阅读了 Thomas Schindl 的博客文章:JFace-Viewer and Eclipse Databinding with > 10.000 Objects .我想试试这个 Eclipse Nebula Grid的
GridTreeViewer
和 + ObservableListTreeContentProvider
(这也是一个 ITreeContentProvider
实现)和一个 VisibleRangeChangedListener
和“懒惰的”标签提供者(如文章中所示)。我可以以某种方式使用我现有的
ITreeContentProvider
吗?实现并在此和新的 ObservableListTreeContentProvider
之间架起一座“桥梁” ?顺便说一句,我检查了 Nebula NatTable ,但我发现将现有内容提供程序迁移到这个新解决方案非常困难,它的 API 和方法完全不同(从子到父的层次结构,而不是相反的方式),以及与 Trees 相关的文档仍然是空的。
最佳答案
Nebula 不久前将 Grid 变成了虚拟的。以下是查看器的片段,其中包含一些惰性内容提供者的示例。
http://git.eclipse.org/c/nebula/org.eclipse.nebula.git/tree/examples/org.eclipse.nebula.snippets/src/org/eclipse/nebula/snippets/grid/viewer
关于eclipse-plugin - TreeViewer 到 GridTreeViewer : bridge between existing ITreeContentProviders and "lazy" ObservableListTreeContentProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890754/