2012-07-24 36 views
2

我用下面的代码(一些细节省略)标签的文本值绑定到我的后端模式:Eclipse RCP的数据绑定:标签的文本进行更新,大小不

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,但是这不会破坏数据绑定的目的吗?

+1

您在包含复合材料时使用了哪种布局,以及将什么传递给.setLayoutData作为参数? – 2012-07-24 18:45:21

+0

我在容器上使用'RowLayout',我没有明确地在标签上设置任何布局数据。 – user1155252 2012-07-25 18:14:45

回答

1

那么你可以用

WidgetProperties.size().observe(nameControl); 

控件的大小绑定到控件的文本(你已经有可观察),并提供您的UpdateStrategy从文字转换为大小IConverter(所以每时间文本更改可以计算文本,然后设置控件的大小)。 确保标签的大小由父母布局管理器识别

+0

正确地更新了标签的大小,但是我的整体布局仍然被破坏,因为父母没有再次布置(或者至少我是这么理解的)。当我添加一个呼叫来布置父母时,问题就解决了。 – user1155252 2012-07-25 18:13:21