次のコードを使用して、ラベルのテキスト値をバックエンドモデルにバインドしています(一部の詳細は省略されています)。
Model model = entry.getModel();
Control nameControl = formToolkit.createLabel(labelPanel, null);
IObservableValue modelValue = BeanProperties.value(model.getClass(), Model.PROPERTY_NAME).observe(model);
IObservableValue widgetValue = SWTObservables.observeText(nameControl);
DataBindingContext context = new DataBindingContext();
UpdateValueStrategy widgetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER);
UpdateValueStrategy modelToWidget = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
context.bindValue(widgetValue, modelValue, widgetToModel, modelToWidget);
モデルが変更されると、ラベルのテキストが適切に更新されます。ただし、ラベルのサイズは変更されません。そのため、モデルが長い名前に変更されると、新しい名前は切り捨てられます。短い名前に変更すると、ラベルは本来よりも多くのスペースを占有します。
名前が変更されるたびにラベルの親を呼び出すプロパティ変更リスナー(モデル名またはラベルテキストのいずれか)を追加することを考えましたlayout
が、それはデータバインディングの目的を損なうのではないでしょうか?