Data binding swt/jface数据绑定:PojoProperties与PojoObservable
我正在编写一个JFace对话框,我想使用对模型对象的数据绑定 查看代码,我可以看到有时我会发现一个用于构建绑定的Data binding swt/jface数据绑定:PojoProperties与PojoObservable,data-binding,jface,eclipse-databinding,Data Binding,Jface,Eclipse Databinding,我正在编写一个JFace对话框,我想使用对模型对象的数据绑定 查看代码,我可以看到有时我会发现一个用于构建绑定的PojoProperties,而另一次则是一个pojoobservates 看看Javadoc,我可以读到: PojoObservables:为POJO(普通旧java对象)创建可观察对象的工厂,该对象符合具有getter和setter的对象概念,但不提供更改时的属性更改事件 PojoProperties:为POJO(普通旧Java对象)创建属性的工厂,该对象符合具有getter和se
PojoProperties
,而另一次则是一个pojoobservates
看看Javadoc,我可以读到:
PojoObservables:为POJO(普通旧java对象)创建可观察对象的工厂,该对象符合具有getter和setter的对象概念,但不提供更改时的属性更改事件
PojoProperties:为POJO(普通旧Java对象)创建属性的工厂,该对象符合具有getter和setter的对象概念,但不提供更改时的属性更改事件
同样的问题也适用于BeansObservables和BeansProperties
SEM的(明显)区别在于,可观察对象允许观察对象,属性允许观察属性,但由于Pojo的数据有一个getter和一个setter,它们之间的区别是什么?我应该为我的对话选择哪一个
下面是代码摘录:
POJO:
公共类数据对象{
私有字符串m_值;
公共字符串getValue(){
返回m_值;
}
公共无效设置值(字符串i_值){
m_值=i_值;
}
}
对话框(相关部分):
@覆盖
受保护的控件createDialogArea(复合父级){
复合容器=(复合)super.createDialogArea(父级);
m_combo=新组合(容器、SWT.BORDER);
m_comboViewer=新的comboViewer(容器,SWT.NONE);
}
装订(相关部分):
//使用PojoObservable
IObservableValue observeValue=PojoObservables.observeValue(m_数据对象,“值”);
IObservableValue observeWidget=SWTObservables.observeSelection(m_组合);
//使用PojoProperties
IObservableValue observeValue=PojoProperties.value(“value”).observe(m_dataObject);
IObservableValue observeWidget=ViewerProperties.singleSelection().observe(m_comboViewer);
我知道有一次我在使用组合,另一次我在使用组合查看器
,但如果需要,我可以从查看器中获取组合并以另一种方式绑定
另外,我是否可以混合使用这两种属性,例如将observeValue
与viewerproperty
一起使用
IObservableValue observeValue=PojoObservables.observeValue(m_dataObject,“value”);
IObservableValue observeWidget=ViewerProperties.singleSelection().observe(m_comboViewer);
我正在使用JFace查看器(特别是ComboViewer)和数据绑定,发现如果我使用
SWTObservables.observeSelection(comboViewer.getCombo());
那么数据绑定工作不正常
然而,如果我使用
ViewersObservables.observeSingleSelection(comboViewer);
然后一切都按预期进行
也许这是我的特殊情况,所以为了更好地了解它,我将在下面的段落中描述我的设置
我拥有名为selectedEntity
和entities
的modelObject
字段,并将此ComboViewer
绑定到modelObject
- 我想显示模型对象中的所有“实体”,如果我将任何实体添加到
集合中,那么我想将该实体自动添加到组合中modelObject.entities
- 如果用户选择组合中的某个项目,我希望自动设置
modelObject.selectedEntity
- 如果我设置
我想自动设置组合选择modelObject.selectedEntity
源代码可以在以下位置找到:自从Eclipse Mars以来,PojoObservables被弃用,取而代之的是PojoProperties,而BeansObservables则被弃用,取而代之的是BeanProperties,因此,应该使用哪一个的答案现在变得显而易见了