UpdateValueStrategy и пользовательское преобразование нескольких элементов графического интерфейса в одно свойство

Я использую привязку данных eclipse с bean-компонентами и Java-приложение SWT. Я успешно связал несколько текстовых полей и флажков с моей моделью. Теперь у меня есть три переключателя:

GUI:

...
Model model = new Model();
...
Button btnAllUsers = new Button(grpExport, SWT.RADIO);
Button btnBatchUsersOnly = new Button(grpExport, SWT.RADIO);
Button btnCurrentBatchOnly = new Button(grpExport, SWT.RADIO);
...

// here comes the big question mark... :(
IObservableValue swtObsBtnAllUsers  = SWTObservables.observeSelection(btnAllUsers);
IObservableValue beanObsUserFilter = BeansObservables.observeValue(model, "userFilter");
bindingContext.bindValue(swtObsBtnAllUsers, beanObsUserFilter);
...

Модель:

public class Model {
    public enum UserFilter {
        ALL_USERS, BATCH_USERS_ONLY, CURRENT_BATCH_ONLY
    }

    private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
    private UserFilter userFilter;

    public void addPropertyChangeListener(...) {...}

    public void removePropertyChangeListener(...) {...}
}

Теперь я хочу привязать три переключателя к свойству userFilter, Логика преобразования должна быть примерно такой:

GUI для преобразования модели:

if (btnAllUsers != null && btnBatchUsersOnly != null && btnCurrentBatchOnly != null) {
if (btnAllUsers.getSelection()) {
        model.userFilter = UserFilter.ALL_USERS;
    } else if (btnBatchUsersOnly.getSelection()) {
        model.userFilter = UserFilter.BATCH_USERS_ONLY;
 } else {
        model.userFilter = UserFilter.CURRENT_BATCH_ONLY;
    }
}

Модель для преобразования GUI:

if (btnAllUsers != null && btnBatchUsersOnly != null && btnCurrentBatchOnly != null) {
    btnAllUsers.setSelection(model.getUserFilter() == UserFilter.ALL_USERS);
    btnBatchUsersOnly.setSelection(model.getUserFilter() == UserFilter.BATCH_USERS_ONLY);
    btnCurrentBatchOnly.setSelection(model.getUserFilter() == UserFilter.CURRENT_BATCH_ONLY);
}

Я читал о конкретных UpdateValueStrategies и конверсиях, но на самом деле не получил начало. Кто-нибудь может мне помочь с коротким примером? Заранее спасибо!

0 ответов

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