Data binding swt/jface数据绑定:PojoProperties与PojoObservable

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

我正在编写一个JFace对话框,我想使用对模型对象的数据绑定

查看代码,我可以看到有时我会发现一个用于构建绑定的
PojoProperties
,而另一次则是一个
pojoobservates

看看Javadoc,我可以读到:

PojoObservables:为POJO(普通旧java对象)创建可观察对象的工厂,该对象符合具有getter和setter的对象概念,但不提供更改时的属性更改事件

PojoProperties:为POJO(普通旧Java对象)创建属性的工厂,该对象符合具有getter和setter的对象概念,但不提供更改时的属性更改事件

同样的问题也适用于BeansObservablesBeansProperties

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,因此,应该使用哪一个的答案现在变得显而易见了