문제

GEF 모델을 업데이트하려고 노력하고 있으며 내가 만든보기에 변경 사항이 표시됩니다. 현재 변경 사항은보기에 반영되고 있습니다. 다음 접근 방식을 사용하여 모델을 업데이트하고 있으며 올바른 접근 방식이 궁금합니다.

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();
            }
        }
    });
도움이 되었습니까?

해결책

EditPart가 모델 변경을 듣고 있습니까?

1- 모델의 청취자로 등록해야합니다. 우리는 EMF의 알림 메커니즘을 사용합니다.

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- 무언가가 변할 때 행동해야합니다.

public void notifyChanged(Notification notification) {
...
} 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top