2

我使用以下代码将标签的文本值绑定到我的后端模型(省略了一些细节):

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每当名称更改时都会调用标签的父级,但这不会破坏数据绑定的目的吗?

4

1 回答 1

1

那么你可以绑定你的控件的大小

WidgetProperties.size().observe(nameControl);

到控件的文本(您已经拥有的可观察对象)并在您的 UpdateStrategy 中提供一个 IConverter 将文本转换为大小(因此每次文本更改时,您都可以计算文本然后设置控件的大小)。确保标签的大小被父母布局管理器识别

于 2012-07-25T08:45:14.323 回答