OK.Из того, что я понимаю, пользователь выбирает кнопку, выбор переносится в модель, а затем вы хотите, чтобы кнопка показывала какой-то новый текст.Если это так, вот решение:
DataBindingContext dbc = getBindingContext();
org.eclipse.swt.widgets.Button b = null; // New with the proper flag for CHECK
Object theModelBean = null; // Initialize as you wish
Теперь вам нужны ДВЕ привязки.Первое связывание, привязывает выделение к логическому значению в модели:
ISWTObservableValue targetBool = WidgetProperties.selection().observe(b);
IObservableValue modelBool = BeanProperties.value("someBooleanField").observe(theModelBean);
dbc.bindValue(targetBool, modelBool);
Теперь, когда выделение происходит, метод setSomeBooleanField вызывается для объекта модели.Чтобы также изменить текст кнопки, этот установщик ДОЛЖЕН вызвать другого установщика в вашей модели объекта, установив новый «текст», который вы хотите отобразить.Этот второй установщик запускает событие изменения свойства, которое, в свою очередь, пробуждает вашу вторую привязку:
IObservableValue targetText = BeanProperties.value("text").observe(b);
IObservableValue modelText = BeanProperties.value("theTextInTheBean").observe(theModelBean);
dbc.bindValue(targetText, modelText);
Эта привязка будет работать только от модели к цели, поэтому вы можете установить политику thje targetToModel в НИКОГДА.
Видите ли, текстовое поле кнопки не поддерживается ViewerProperties, но поддерживается WidgetProperties, а также классом BeanProperties.Вы можете связать почти все с BeanProperties, пока установщик запускает событие изменения свойства.
Установщики в модели должны быть такими:
public void setSomeBooleanField(boolean b){
firePropertyChange("someBooleanField", this.someBooleanField, this.someBooleanField = b);
// Form the new Text
this.setNewText(newText);
}
public void setNewText(String newText){
firePropertyChange("newText", this.newText, this.newText = newText); // Wake up the second Binding
}