使用EMF和RCP进行多级主/细数据绑定

时间:2011-05-30 11:22:33

标签: data-binding rcp master-detail eclipse-emf

我用EMF制作了一个模型,代表了设备的设置和RCP GUI。在GUI中,我有一个列表来选择模型类型的不同设备(主)。

模型有一个小类的对象列表,它应该显示在表格中(详细信息)。

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);

但这并没有完成全部工作。至少所有“旧”值都被替换,但仍然会出现null问题。

我需要的是在启动应用程序之后将tableSelection设置为空状态,此时尚未选择任何tableitem。

1 个答案:

答案 0 :(得分:2)

我自己找到了解决方案。问题实际上是旋转器本身。当选择为空且没有值时,它会抛出一个nullpointer。

我通过给它一个自定义转换器(从int到int ...)来解决它,如果源为null,我返回一个默认值。 现在验证工作正常,我的按钮的启用状态设置正确。