在向导上刷新Eclipse 4 RCP视图执行完成

时间:2014-05-21 02:29:45

标签: eclipse eclipse-rcp e4

新秀问题,我没有太多运气。在我的e4 RCP应用程序中,我有几个实例,我在向导中创建一个对象,然后应该出现在我的一个视图中。

所需的行为类似于在创建新项目后eclipse Package Explorer View的更新方式。

我以为我可以从partService中获取视图并运行我自己的更新方法:

MPart ingredientsView = partService.showPart("com.personal.recipes.part.ingredientsview", PartState.ACTIVATE); 
IngredientsView iv = (IngredientsView) ingredientsView.getObject(); 
iv.updateView();

虽然这可以在其他地方使用,但是从向导调用'partService'时为null,而应用NPE则为。

那么在修改内容后强制e4视图更新的被禁止方法是什么?

编辑: 我尝试在他的回答中使用像@ greg-449这样的ContextInjectionFactory,但是我不确定将它放在我的代码中,或者如何定义上下文。我从工具栏按钮启动向导,并将以下代码放在我的处理程序中:

    @Execute
public void execute(Shell shell) {
    IEclipseContext context = EclipseContextFactory.create();
    IWizard ingredientWizard = ContextInjectionFactory.make(IngredientWizard.class, context);

    WizardDialog wizardDialog = new WizardDialog(shell, ingredientWizard);
    wizardDialog.open();
    }

但是,当我尝试使用@Inject EPartService partService获取部件服务时;我得到一个InjectionException,说没有找到错误。

一旦注射可用,使用EventBroker就像是要走的路。

2 个答案:

答案 0 :(得分:1)

enter code here更新视图的最佳方法是使用模型作为视图的内容。您的向导似乎允许编辑或创建成分。当您执行向导的完成时,您可能正在修改一些成分数据。应该告知成分模型这些变化。如果视图使用观察此模型的内容提供程序,则在模型看到更新时将自动更新(这是观察者模式)。 这是如何工作的取决于您的数据的性质。您可以使用Java中的PropertyChange-Support。

为此,让内容提供者在数据更改时实现org.eclipse.jface.util.IPropertyChangeListener接口并触发属性更改事件。

更新

我的ContentProvider实现了属性更改界面。每当收到属性更改事件时,都会刷新查看器(异步)。我的所有持久性操作都由数据管理器处理,类似于Fowler的表数据网关模式,但有时用于多个表。数据管理器触发属性更改事件。这样UI(向导)不需要知道持久性

答案 1 :(得分:0)

仅在应用程序模型知道的对象上执行注入。因此,除非你手动操作,否则它不能用于向导或对话框。在创建对话框时使用ContextInjectionFactory

IWizard wizard = ContextInjectionFactory.make(YourWizardClass.class, eclipseContext);

WizardDialog dialog = new WizardDialog(shell, wizard);

这将对您的向导类进行注入,使您可以访问EPartService

你也可以使用'事件经纪人' (IEventBroker)将事件广播给任何感兴趣的事物,而不是找到您的特定视图。