1

问题

想象一下基于 EMF 模型的 JFace 形式

+-------------------------------------------------+
| My text field1           :  __________________  |
+-------------------------------------------------+
| Inherit value from field1:  [x]                 |
| My text field2           :  __________________  |
+-------------------------------------------------+

对应的 EMF-EClass

class Model {
    String field1;
    boolean inherit;
    String field2;
}

用户应在此处输入 的值field1。那么他可以

  • 选中复选框以将值从复制field1field2
  • 取消选中复选框并为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到自己。这看起来很奇怪,将来可能会导致问题。
4

0 回答 0