基于托马斯Schindl的文章JFace的,浏览器和Eclipse数据绑定与> 10.000对象(这表明一个很好的想法),我想转换一个普通TreeViewer+多次ITreeContentProvider实现到星云GridTreeViewer,它使用ObservableListTreeContentProvider,一个VisibleRangeChangedListener和Eclipse数据绑定,以使它"懒惰"(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.VIRTUAL …
从一些API调用中,我IObservableList<E>从Eclipse Databinding框架中获取了一个.我希望IObservableList<E>根据元素类型定义的一些谓词从这个派生出另一个E.应根据原始列表中的更改动态更新派生列表.
我怎样才能最好地实现它?我考虑过继承DecoratingObservableList,但无法弄清楚如何使用它.
当然,我可以自己实现整个IObservableList界面,但我想知道是否没有其他实用程序类可以使用.
我正在编写一个JFace对话框,我想使用数据绑定到模型对象.
查看代码我可以看到有时我发现PojoProperties用于构建绑定,而有时则使用它PojoObservables.
看着Javadoc,我可以读到:
PojoObservables:一个工厂,用于为POJO(普通的旧Java对象)创建可观察对象,这些对象符合具有getter和setter的对象的想法,但不会在更改时提供属性更改事件.
PojoProperties:一个工厂,用于为POJO(普通旧Java对象)创建属性,这些属性符合具有getter和setter的对象的想法,但不会在更改时提供属性更改事件.
同样的问题适用于BeansObservables和BeansProperties之间存在的差异
(显而易见的)差异是因为observable允许观察对象而属性允许观察属性,但由于Pojo有一个getter和一个setter用于它的数据,它们之间有什么区别?我应该为我的对话选择哪一个?
以下是代码摘录:
POJO:
public class DataObject {
private String m_value;
public String getValue() {
return m_value;
}
public void setValue(String i_value) {
m_value = i_value;
}
}
Run Code Online (Sandbox Code Playgroud)
DIALOG(相关部分):
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
m_combo = new Combo(container, SWT.BORDER);
m_comboViewer = new ComboViewer(container, SWT.NONE);
}
Run Code Online (Sandbox Code Playgroud)
BINDING(相关部分):
// using PojoObservable
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, …Run Code Online (Sandbox Code Playgroud)