/ / Zusammengesetzte Ereignisse in lokal begrenzten Regionen mit Prism (CAL) - c #, Prisma

Zusammengesetzte Ereignisse in lokal begrenzten Bereichen mit Prisma (CAL) - c #, Prisma

Ich beginne Prism (CAL) mit einer kleinen Anwendung zu trainieren und hatte einige Probleme.

Ich erstelle mehrere Instanzen von MainView, die selbst einige Regionen enthalten, und zeige sie in der Shell. Ich verwende Bereiche mit lokaler Ausdehnung, um View-Injektionen in meinem MainView leicht zu handhaben.

Derzeit suche ich nach einem WegKommunikation zwischen den Ansichten (ViewModels) im MainView. Zusammengesetzte Ereignisse könnten dies tun, aber wenn ich diese Ereignisse veröffentliche, werden sie in allen Fällen meines MainView behandelt, was ich wirklich nicht will.

Gibt es eine Möglichkeit, "lokal begrenzte" zusammengesetzte Ereignisse wie in lokal begrenzten Regionen zu erzeugen? Oder gibt es in meinem Fall eine bessere Möglichkeit, zwischen Ansichten zu kommunizieren?

Antworten:

0 für die Antwort № 1

Formularsender als Argument übergeben. (Auf jeden Fall muss es eine Möglichkeit geben, die Fenster Ihrer Anwendung zu unterscheiden - verwenden Sie sie.) Wenn Sie das Ereignis empfangen, prüfen Sie, ob das aktuelle Formular ReferenceEquals an den Absender gesendet wird (oder das Formular "Schlüssel").


1 für die Antwort № 2

Es ist auch möglich, EventAggregator mit lokalem Gültigkeitsbereich zu erstellen und sich in einem untergeordneten UnityContainer zu registrieren, der in der Hauptansicht erstellt wird (an derselben Stelle, an der ein lokal begrenzter Bereich erstellt wird).

Dies ist ein Äquivalent zu einem lokalen Bereich imho.


0 für die Antwort № 3

Nach langen Diskussionen wurde EventAggregator ausgewählt. Mit anderen teilen, falls sie sich in derselben Situation befinden und unser Denkprozess könnte ihnen helfen

(Problemstellung: Siehe meinen vorherigen Kommentar)

Die Hauptansicht (ViewModel), zu der Regionen gehörenhalten Ansichten von anderen Modulen und bilden die TabItem-Ansicht, die für das Bereinigen der darin enthaltenen untergeordneten Ansichten verantwortlich ist. Daher sollte beim Schließen-Ereignis von TabItem diese Hauptansicht (ViewModel) ihre untergeordneten Ansichten darüber informieren, dass sie ordnungsgemäß heruntergefahren wird.

Sowohl EventAggregator als auch .Net Eventing wurden unter verschiedenen Aspekten als potenzieller Kandidat für das Senden der Nachricht zum Herunterfahren gründlich untersucht.

Da in einer von Prism entkoppelten Umgebung die Hauptansicht technisch nicht die untergeordneten Ansichten kennt und umgekehrt, wurde EventAggregator ausgewählt.

Ein Problem mit Event Aggregator ist, dass esveröffentlicht Ereignisse für die gesamte Anwendung, aber unsere Anforderung bestand darin, Ereignisse zu filtern, die aus dem Schließen der tabitemview stammen. Der EventAggregator wurde entwickelt, um mithilfe eines Filters zu überprüfen, ob die Anforderung zum Herunterfahren von demselben Tabitemview-Objekt stammt (wir haben den Bereichsmanager für jeden TabItem verwendet und dieser Bereichsmanager wurde als Filter verwendet). Erst dann wird die Aktion zum Herunterfahren ausgeführt. Dadurch wird sichergestellt, dass das Auslösen des Herunterfahrens in einer Registerkarte keine untergeordneten Ansichten in anderen Registerkarten schließt, die zufällig denselben Regionsnamen haben.

Vielen Dank, RDV