Я пытаюсь реализовать привязку данных JFace в пользовательском (не SWT, не JFACE) виджете даты и времени.Виджет сделан с нуля третьей стороной, и мы используем его в нашем приложении.
Я пытаюсь добавить привязку данных к нему, и это почти работает, в том смысле, что когда я создаю привязку,Метод "fillInitialValue" действительно может поместить правильную дату в виджет, но слушатель изменения значения не работает (точка останова внутри него, вообще не выполняется).
В классе ValueBinding (org.eclipse.core.databinding) добавляет прослушиватель
target.addValueChangeListener(targetChangeListener);
, где целью является моя AbstractObservableValue
реализация (DateChooserObserver), а прослушиватель по умолчанию
private IValueChangeListener targetChangeListener = new IValueChangeListener() {
@Override
public void handleValueChange(ValueChangeEvent event) {
if (!updatingTarget
&& !Util.equals(event.diff.getOldValue(), event.diff
.getNewValue())) {
doUpdate(target, model, targetToModel, false, false);
}
}
};
Это моя цельНаблюдатель:
public class DateChooserObserver extends AbstractObservableValue<Date> {
private DateChooserCombo widget;
public DateChooserObserver(DateChooserCombo widget) {
super();
this.widget = widget;
}
@Override
public Object getValueType() {
return Date.class;
}
@Override
protected Date doGetValue() {
return widget.getValue();
}
@Override
protected void doSetValue(Date value) {
widget.setValue(value);
}
}
Единственное, о чем я могу думать, это то, что мне может понадобиться поместить наблюдателя изменения значения (каким-то образом) в поле фактической даты, а не в виджет, но я не уверен, как это сделать.
Понятия не имею, почему это не работает.Из двух преобразователей, которые у меня есть (преобразовать атрибут в виджет и виджет в атрибут), оба запускаются изначально, но, как я уже сказал, слушатель не обнаруживает изменения в поле java.util.date
виджета (или самого виджета, яне знаю) и конвертировать виджет в атрибут не выполняется при выборе новой даты.