问题
想象一下基于 EMF 模型的 JFace 形式
+-------------------------------------------------+
| My text field1 : __________________ |
+-------------------------------------------------+
| Inherit value from field1: [x] |
| My text field2 : __________________ |
+-------------------------------------------------+
对应的 EMF-EClass
class Model {
String field1;
boolean inherit;
String field2;
}
用户应在此处输入 的值field1
。那么他可以
- 选中复选框以将值从复制
field1
到field2
- 取消选中复选框并为
field2
我的问题:
- 应该如何使用 JFace 数据绑定正确实现这种模式?
(文本字段可以是各种小部件,包括表格)
(我想将启用/禁用field2
文本框排除在此问题的范围之外)
脏溶液
IObservableValue value1Obs = EMFProperties.value(field1).observe(model);
IObservableValue value2Obs = EMFProperties.value(field2).observe(model);
IObservableValue inheritObs = EMFProperties.value(inherit).observe(model);
IObservableValue copyObs = new ComputedValue() {
@Override
protected Object calculate() {
if ((Boolean)inheritObs.getValue()) {
return value1Obs.getValue();
}
return value2Obs.getValue();
}
}
getBindingContext().bindValue(value2Obs, copyObs);
- 不要使用这个
- 这适用于简单的属性,但不适用于列表/表格。
- 另外,如果
inherit=false
我绑定field2
到自己。这看起来很奇怪,将来可能会导致问题。