2012-07-24 10 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