2015-07-15 3 views
0

У меня есть диалог, показывающий некоторые значения. Теперь мне нужно знать, изменил ли пользователь что-то.Eclipse DatabindingContext valuechange Listener => dirty

Все поля завернуты в 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); 

Любые идеи, как достичь этого?

С наилучшими пожеланиями

ответ

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 
    } 
}