Question

J'essaie de mettre à jour un modèle pour GEF et d'afficher les modifications dans la vue que j'ai créée. Actuellement, aucun changement n’est reflété dans la vue. J'utilise l'approche suivante pour mettre à jour le modèle et je me demande si c’est la bonne approche à adopter:

Display.getDefault().asyncExec(new Runnable() {
   public void run() {
            String viewId = "beat.views.BeatView";

            IWorkbench workbench = PlatformUI.getWorkbench();

            IWorkbenchWindow mainWindow = workbench
                    .getActiveWorkbenchWindow();

            try {

                BeatView view = (BeatView) mainWindow.getActivePage()
                        .showView(viewId);

                BeatEditPart beatEditPart = (BeatEditPart)view.getGraphicalViewer().getContents();

                BeatModel beatModel = (BeatModel)beatEditPart.getModel();
                beatModel.setObjects(model);
            } catch (PartInitException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
Était-ce utile?

La solution

Votre EditPart écoute-t-elle les modifications de modèle?

1 - Vous devez vous inscrire en tant qu'auditeur de votre modèle. Nous utilisons le mécanisme de notification de la FEM.

public void activate() {
    if (!isActive())
        ((EObject) getModel()).eAdapters().add(this);
    super.activate();
}

public void deactivate() {
    if (isActive())
        ((EObject) getModel()).eAdapters().remove(this);
    super.deactivate();
}

2 - Vous devez agir lorsque quelque chose change.

public void notifyChanged(Notification notification) {
...
} 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top