Привязка данных SWT / Jface: PojoProperties против PojoObservable

Я пишу диалог JFace, и я хотел бы использовать привязку к объекту модели.

Глядя на код, я вижу, что бывают случаи, когда я PojoProperties используется для создания привязки, в то время как в другой PojoObservables,

Глядя на Javadoc, я могу прочитать:

PojoObservables: фабрика для создания наблюдаемых объектов для POJO (простых старых java-объектов), которые соответствуют идее объекта с геттерами и сеттерами, но не предоставляют события изменения свойств при изменении.

PojoProperties: фабрика для создания свойств для POJO (простых старых объектов Java), которые соответствуют идее объекта с геттерами и сеттерами, но не предоставляют события изменения свойств при изменении.

Тот же вопрос относится к разнице, которая существует между BeansObservables и BeansProperties

(Очевидное) различие заключается в том, что наблюдаемое позволяет наблюдать объекты, а свойства позволяют наблюдать свойства, но поскольку у Pojo есть геттер и сеттер для своих данных, в чем разница между ними? И какую из них мне выбрать для моего диалога?

Вот выдержка из кода:

POJO:

public class DataObject {
  private String m_value;
  public String getValue() {
    return m_value;
  }
  public void setValue(String i_value) {
    m_value = i_value;
  }
}

ДИАЛОГ (соответствующая часть):

@Override
protected Control createDialogArea(Composite parent) {
    Composite container = (Composite) super.createDialogArea(parent);

    m_combo = new Combo(container, SWT.BORDER);
    m_comboViewer = new ComboViewer(container, SWT.NONE);

}

СВЯЗЬ (соответствующая часть):

    // using PojoObservable
    IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
    IObservableValue observeWidget = SWTObservables.observeSelection(m_combo);

    // using PojoProperties
    IObservableValue observeValue = PojoProperties.value("value").observe(m_dataObject);
    IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);

Я понимаю, что один раз я использую комбо, а другой я использую ComboViewer, но я могу получить комбо от зрителя и связать другой способ, если мне нужно...

Кроме того, могу ли я смешать два, например, использовать observeValue с ViewerProperties?

    IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
    IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);

2 ответа

Я немного поигрался со зрителями JFace (особенно ComboViewer) и привязкой к данным и обнаружил, что если я использую

SWTObservables.observeSelection(comboViewer.getCombo());

тогда привязка данных не работает правильно.

Однако, если я использую

ViewersObservables.observeSingleSelection(comboViewer);

Тогда все работает как положено.

Возможно, это особый случай для моего случая, поэтому для лучшего обзора я опишу его в следующем параграфе.

я имею modelObject с именем поля selectedEntity а также entities и связать это ComboViewer к modelObject,

  • Я хочу отобразить все "сущности" в объекте модели, если я добавлю какую-либо сущность в modelObject.entities Коллекция, то я хочу, чтобы этот объект был добавлен в комбо автоматически.
  • Если пользователь выбирает какой-то элемент в комбо, я хочу modelObject.selectedEntity быть установлен автоматически.
  • Если я установлю modelObject.selectedEntity Я хочу, чтобы комбинированный выбор был установлен автоматически.

Исходный код можно найти по адресу: https://gist.github.com/3938502

Начиная с Eclipse Mars, PojoObservables устарела в пользу PojoProperties, а BeansObservables устарела в пользу BeanProperties, поэтому ответ на этот вопрос теперь стал очевидным.

Другие вопросы по тегам