【GMF】实现响应式更新Editpart

105 阅读1分钟

本文参考与这篇需要科学冲浪

第一种是通过监听者的方式,这种适用于model直接属性的修改,通过set方法可以发布通知的情况。

在需要响应式更新的模型(editpart绑定的模型类)中声明一个监听器,是javaBean提供的。

image.png

同时要添加add和remove函数暴露给需要监听的editpart,以便于在editpart绑定listener。

image.png

然后需要在这个模型的构造函数中对监听器listeners初始化,把需要监听的bean也就是this传进去。

image.png

然后在需要监听的属性的set方法中通过listeners.fireProperty方法通知监听者属性发生变化了。 然后模型这边就结束了。需要去监听者(Editpart)那边进行绑定监听器。 监听者需要实现propertyChangeListener接口并重写propertyChange方法,这样在set方法通知属性修改时这个方法会执行。

image.png 在editpart中重写activate和deactive方法,主要是在figure图形创建和销毁时向模型添加和移除监听器,也就是使用之前model提供的add和remove方法。在activate中通过getModel方法获取模型:

image.png propertyChange方法中需要手动执行refreshVisuals方法,这方法会在重新刷新editpart,重新给label赋值,这样就实现了label的响应式更新。因为我这个不涉及嵌套的childran更新所以并没有重写getModelChildren()方法。

image.png

第二种就是需要类似在action中修改模型,然后让editpart修改图形,这种的话只要在action中获取editpart对象,作为形参传进去等到模型修改结束手动调用refresh对象就行了。

image.png image.png