(可选)在EMF属性之间复制值

时间:2017-10-24 10:01:39

标签: jface emf eclipse-databinding

问题

想象一下基于EMF模型的JFace-form

+-------------------------------------------------+
| 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绑定到自身。这看起来很奇怪,将来可能会引发问题。

0 个答案:

没有答案