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

如何解决使用EMF和RCP进行多级主/明细数据绑定

| 我用EMF建立了一个模型,代表一个设备的设置,以及一个RCP GUI。在GUI中,我有一个列表,用于选择模型类型(主)的不同设备。 该模型具有一个小类的对象列表,应在表中显示(详细信息)。 tableItems本身需要进行编辑,因此我有一个带有复选框等的GUI小部件,可以更改设置。这里的表项是主表,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));
更改设备选择时,表项将被替换。但是tableSelection似乎对此有问题。有时它仍然包含来自其他设备的表项的值,有时它仅包含null。 我还有一个按钮,可以根据所有字段的验证状态启用/禁用该按钮。当tableSelection在这些字段中输入null时,验证将不起作用,并且在选择表中的某个条目之前,该按钮将被禁用。 我试图手动将选择设置为空,并在列表上添加一个侦听器,并且:
tableViewer.setSelection(StructuredSelection.EMPTY,true);
但这并不能完全发挥作用。至少所有\“ old \”值都将被替换,但是仍然会出现空问题。 我需要做的就是将应用程序启动后将tableSelection设置为空状态,此时尚未选择任何表项。     

解决方法

        我自己找到了解决方案。问题实际上是旋转器本身。当选择为空且没有值时,它将抛出空指针。 我为它提供了一个自定义转换器(从int到int ...)来解决它,如果源为null,则在其中返回默认值。 现在,验证工作正常,并且我的按钮的启用状态设置为正确。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?