【问题标题】:How to cross update of view between nattable and Jface view如何在 nattable 和 Jface 视图之间交叉更新视图
【发布时间】:2019-06-07 05:09:57
【问题描述】:

Eclipse RCP 视图通信,其中一个视图包含 nattable,另一个视图包含 jface 控件,如按钮、下拉菜单。

目前例如有3个视图/编辑器,如下图

View1 - 包含员工详细信息,这是一个 Nattable 和 它的单元格包含字符串、长整数、布尔值、日期值等数据。 每一行代表一个数据,其他视图是对应的数据 选定的行

View2 - 显示与 View 1 中所选行相对应的地址, 用户可以修改view2的数据。

View3 - 显示员工的部门详细信息,也可以修改

所以所有 3 个视图都呈现一个模型的数据,比如 Employee

   Employee 
     |_Name 
     |_EmpId
     |_Married
     |_DOJ
     |_Address
         |_Type
         |_City Name
         |_State
         |_PinCode
     |_Department Details
         |_Department
         |_Project
         |_Manager

问题:

我想知道views1和其他view之间的最佳沟通方式是什么

  1. 在 view1 中选择行时,其他两个视图应相应更新;

  2. 如果 view2/view3 中的任何数据发生更改,则视图 1 应收到其他视图中数据更改的通知

  3. 当条件 2 发生时,我想在 view1 中显示脏行。

【问题讨论】:

    标签: view eclipse-rcp jface rcp nattable


    【解决方案1】:

    在与您描述的场景相关的 E4 应用程序中进行采访通信的典型方法是使用 ESelectionService 来触发处理选择以打开另一个视图,并通过 Eclipse 4 事件系统进行通信。

    对于基于 NatTable 中的选择打开视图的方案一,您可以使用 NatTable Eclipse 4 扩展功能中的E4SelectionListener。这是一个ILayerListener,将选择转发给ESelectionService。可以在NatTable examples 中找到一个示例。

    为了通知视图 1 另一个视图的变化,我建议使用 IEventBroker 从 view2/view3 发送一个事件,并对 view1 中的事件做出反应。这样视图就可以尽可能地解耦。 Eclipse 4 event system 是了解事件系统的良好起点。

    【讨论】:

    • 非常感谢@Dirt Fauth 的回复,我还想再问一件事,目前的应用程序是基于 3.x 而不是基于 e4 的,所以是否有可能实现相同的目标在 3.x 中?如果是,那怎么办?我虽然可以实现如下但看起来不是一个好的解决方案:A. view1 到其他视图 -> 通过 3.x 的选择服务 B. 视图 2 和视图 3 -> 也可以通过选择服务完成,但每个视图有很多控件/小部件,在这种情况下,我必须从所有视图中将每个控件注册为选择提供程序。请建议我最好在 3.x 中这样做。
    • 对于 3.x,您可以使用 RowSelectionProvider,如本例所示:github.com/eclipse/nebula.widgets.nattable/blob/master/… 从子视图返回到主视图的通信,以便在细节更改后仅使主视图变脏,实际上我不确定这是如何以 E3 方式完成的。好几年过去了。如果您使用较新的平台并且仅使用 E3 API,则事件内容应该以相同的方式工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多