RCP View aktualisieren bei Änderung 2. View

Biene_Maja

Mitglied
Hi,

ich habe eine Main-View mit einem TreeViewer der Projekte und als Zweige Personen in diesen Projekten enthält. Das ganze arbeitet mit einer Datenbank, das Model des TreeViewer's ist die Tabelle Projekte die eine m:n Beziehung mit der Tabelle Personen hat. Durch ein Command kann eine 2. View, "Personen verwalten", geöffnet werden, (Model ist die Tabelle Personen) in der alle vorhandenen Personen in einem TableViewer gelistet sind. In dieser View können Personen geändert, gelöscht oder erstellt werden. Ändere ich jetzt bspw. eine Person speichere ich das im Model und die Tabelle wird durch DataBinding aktualisiert. Da in der Main-View aber auch Personen sind (nämlich diejenigen die auch in Projekten sind) muss ich auch diese aktualisieren nur wie?

Für mich stellen sich jetzt 2 Probleme.
1. Wie erfährt die Main-View das das Model der 2. View geändert wurde?
2. Wie aktualisiere ich dann die Main-View (mir kommt da nur in den Sinn die Projekt-Tabelle neu einzulesen und den tableViewer Input mit tableViewer.setInput(projektTabelle) neu zu setzen)?

Danke im Vorraus für Antworten 🙂
 
Dein Modell muss das einfach unterstützen.
Wenn du für alle Arten von Änderungen Events feuerst kann sich die Oberfläche automatisch aktualisieren.
Je nachdem wie dein Modell aufgebaut ist, wird das einfacher, oder schwieriger.
Wenn es zB ein EMF Modell ist funktioniert alles out-of-the-box
 
Das Problem ist aber doch das ich 2 Modelle habe - einmal das in der MainView (Projekte mit in den Projekten vorhandenen Personen) und das Modell in der Personenverwaltung (alle Personen die existieren also auch die die nicht in Projekten sind). Deswegen ändert sich doch die MainView auch nicht, weil ich das Modell der MainView nicht verändere, sondern nur das Verwaltungsmodell.
 
Es sind doch aber nur zum Teil gemeinsame Daten. Es sind ja nicht alle Personen in der Projektliste enthalten, es gibt ja auch Personen ohne Projekte. Oder meinst ich sollte nen Übermodell machen, indem sich bspw. die Projekt- und die Personenliste befindet?
 
Vermutlich hast du eine globale Liste mit Personen und Projekte können Personen aus dieser Liste referenzieren. Genauso würde ich das auch Modellieren.
 
mein Aufbau ist wie folgt:

Projekt enthält eine Liste mit Personen in diesem Projekt:
Java:
private List<Person> persons;

Projekt-Model:
Die Liste mit allen Projekten
Java:
private List<Project> projects = new ArrayList<Project>();

die ich in der Main-View als Input setze:

Java:
projektModel = new ProjectsModel();
projectsList = new WritableList(projektModel.getProjects(), Project.class);			
treeViewer.setInput(projectsList);

der Aufbau von Person, Personen-Model und Personen-View verhält sich quasi analog, so dass ich da das personModel.getPersons() als input setze.
 
So?

PersonenModel:

Java:
 public static List<Person> persons;

Projekt:

Java:
Referenzen auf globale Liste in Personen-Model

ProjektModel:

Java:
 private List<Project> projects = new ArrayList<Project>();


In den Views dann
Java:
 setInput(ProjektModel.getProjects());
Java:
 setInput(PersonenModel.persons());

Ich peil jetzt nur nicht was in Projekt soll? 🙁
 
Der Unterschied liegt im Containment. Das Personen Modell enthält alle Personen (Containment), das Projekt referenziert Personen (kein Containment).
Ich kann dir nur raten das ganze mit EMF Modellieren. Das hilft dir nicht nur dabei dein Modell zu formalisieren, sondern du bekommst auch gleich die Content- LabelProvider, das Databinding, Undo/Redo Support und vieles mehr dazu geschenkt.
 

Zurück
Oben