0

我有一个对话框来显示一些值。现在我需要知道用户是否更改了某些内容。

所有字段都包装在 eclipse DatabindingContext 中。

...
bindingContext.bindValue(process_observable_milage, process_bean_mileage, new UpdateValueStrategy(), null);
...

如果我更改某些字段,模型内的 propertyChangeSupport 侦听器会被触发。(调用属性的设置器)。

this.firePropertyChange(SignalEntity.SIGNALNAME, this.signalname, this.signalname = name);

现在我需要一个全局监听器来检测是否有任何值被改变。

我尝试了以下但没有成功:

    IObservableValue globalValidity = new WritableValue();
    globalValidity.addChangeListener(new IChangeListener() {
        @Override
        public void handleChange(ChangeEvent event) {
             dirty = true;
        }
    });
    bindingContext.bindValue(globalValidity, new AggregateValidationStatus(bindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY), null, null);

这是来自另一个添加了一些 afterConvertValidators 的类。所以我想我必须改用“addValueChangeListener”,但即使这样也行不通。

    IObservableValue globalValidity = new WritableValue();
    globalValidity.addValueChangeListener(new IValueChangeListener() {
        @Override
        public void handleValueChange(ValueChangeEvent event) {
            dirty = true;
        }
    });
    bindingContext.bindValue(globalValidity, new AggregateValidationStatus(bindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY), null, null);

任何想法如何实现这一目标?

此致

4

1 回答 1

0

我用:

IObservableValue setError = PojoProperties.value("error").observe(new SetError());

bindingContext.bindValue(setError, new AggregateValidationStatus(bindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY));


private class SetError
{
  public IStatus getError()
  { 
    return ValidationStatus.ok();
  }

  public void setError(final IStatus status)
  {
    final String msg = status.isOK() ? null : status.getMessage();

    // TODO deal with message / status
  }
}
于 2015-07-15T09:48:37.217 回答