我认为将驱动视图的数据模型与视图 UI 分开是个好主意。这将允许不断更新数据模型并添加或删除视图,而无需维护任何类型的状态。
您可以在插件 Activator 中将数据模型添加为 SelectionService 侦听器:
private ISelectionListener listener;
public void start(BundleContext context) throws Exception {
super.start(context);
listener = new ISelectionListener() {
@Override
public void selectionChanged(IWorkbenchPart part,
ISelection selection) {
// Update model
}
};
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getSelectionService()
.addSelectionListener(listener);
}
public void stop(BundleContext context) throws Exception {
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getSelectionService().removeSelectionListener(listener);
super.stop(context);
}
创建视图时,它可以使用数据模型来填充 UI 组件并监听数据模型以获取任何实时更新。
您需要确保在启动应用程序时激活您的插件。以下问题可以对此有所帮助。
自动启动 OSGi 服务
编辑
即使视图当前处于隐藏状态,以下代码也可用于激活您的视图(调用 createPartControl)。通过将此代码放在您的激活器中,它可以在您的插件激活后立即开始监听模型事件。
PlatformUI.getWorkbench().addWindowListener(new IWindowListener() {
...
@Override
public void windowActivated(IWorkbenchWindow window) {
IViewReference view = window.getActivePage().findViewReference(
VIEW_ID);
if (view != null) {
view.getPart(true);
}
}
});