2011-05-30 57 views
4

我製作了一個EMF模型,代表了設備的設置和RCP GUI。在GUI中,我有一個列表來選擇模型類型(Master)的不同設備。使用EMF和RCP的多級主/明細數據綁定

該模型有一個小類的對象列表,應顯示在一個表(Detail)中。

tableItems本身需要編輯,所以我有一個小的GUI部件與複選框等來更改設置。這裏的tableitem是master,GUI中顯示的所有字段都是細節。

觀測到的設備列表:

IObservableValue selection = ViewersObservables.observeSingleSelection(availableDevicesList); 

表:

IObservableList list = EMFObservables.observeDetailList(Realm.getDefault(), selection,DevicePackage.Literals.LIST); 

TableViewer tableViewer = new TableViewer(parent, SWT.SINGLE | SWT.FULL_SELECTION); 
tableViewer.setInput(list); 

IObservableValue tableSelection = ViewersObservables.observeSingleSelection(tableViewer); 

編輯:

Spinner field1 = new Spinner(parent, SWT.BORDER); 

dbc.bindValue(SWTObservables.observeSelection(field1), EMFObservables.observeDetailValue(Realm.getDefault(), tableSelection, DevicePackage.Literals.Value1)); 

當改變設備選擇tableitems被替換。但tableSelection似乎有這個問題。有時它仍然包含來自不同設備的tableitem的值,有時它只包含null。 我也有一個按鈕,根據所有字段的驗證狀態啓用/禁用。當tableSelection將null置於這些字段時,驗證不起作用,並且按鈕被禁用,直到選中表中的條目爲止。

我想手動設置選擇空的,名單上的監聽和:

tableViewer.setSelection(StructuredSelection.EMPTY, true); 

但這並不做充分的工作。至少所有「舊」值都被替換,但仍然會出現空值問題。

我只需要將tableSelection設置爲一個空狀態,因爲應用程序啓動後,當沒有選擇tableitem時。

回答

2

我自己找到了解決方案。問題實際上是微調器本身。當選擇爲空並且沒有值時,它會拋出一個空指針。

我解決了它通過給它一個自定義轉換器(從int到int ...),如果源返回null,則返回默認值。 現在驗證工作正常,我的按鈕的啓用狀態設置正確。