【发布时间】:2012-10-12 09:00:35
【问题描述】:
我正在编写一个 JFace 对话框,我想对模型对象使用数据。
查看代码我可以看到,有时我会找到用于构建绑定的PojoProperties,而其他时候则使用PojoObservables。
查看我可以阅读的 Javadoc:
PojoObservables:为 POJO(普通的旧 Java 对象)创建 可观察对象 的工厂,符合带有 getter 和setter 但不提供更改时的属性更改事件。
PojoProperties:为 POJO(普通的旧 Java 对象)创建 properties 的工厂,符合带有 getter 和 setter 的对象的概念但不提供更改时的属性更改事件。
同样的问题也适用于 BeansObservables 和 BeansProperties
之间存在的差异(明显的)区别似乎是 observable 允许观察对象,而 properties 允许观察属性,但是由于 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;
}
}
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);
}
BINDING(相关部分):
// using PojoObservable
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = SWTObservables.observeSelection(m_combo);
// using PojoProperties
IObservableValue observeValue = PojoProperties.value("value").observe(m_dataObject);
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
我知道有一次我使用的是组合,而另一次我使用的是ComboViewer,但如果需要,我可以从查看器中获取组合并以另一种方式绑定...
另外,我可以将两者混合使用吗,例如使用observeValue 和ViewerProperties?
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
【问题讨论】:
标签: data-binding jface eclipse-databinding