2012-03-30 6 views
0

Ich versuche, eine WPF-Anwendung mit WPF und PRISM zu erstellen. Ich benutze auch MEF und MVVM. Ist es möglich, zwei Viewmodels zu verwenden, die miteinander kommunizieren können, indem Sie den Ereignisaggregator verwenden? Z.B. Im Ansichtsmodell A veröffentlichen und im Ansichtsmodell B abonnieren? Und wenn ja wie? Ich habe ein Programm mit mehreren Viewmodels erstellt und einige dieser Viewmodels sollten miteinander kommunizieren, aber wenn ich in Viewmodel A mit einem Eventaggregator publiziere, wird A Subscribe im Viewmodell B niemals als Teil desselben Ereignisaggregators erkannt, so dass dies nicht möglich ist update my View verbunden mit viewmodel B.PRISM MEF Kommunikation von ViewModel zu ViewModel mit Eventaggregator in WPF

Antwort

0

Die einzige Möglichkeit ist, dass ViewModel "B" nicht geladen ist oder das Event noch nicht abonniert hat. Wenn das nicht stimmt, empfehle ich Ihnen, einige Schnipsel einzufügen.

0

Abonnieren Sie eine WeakReference (ein schwaches Abonnement)? Wenn dies der Fall ist und Ihr Abonnent nicht an anderer Stelle referenziert wird, wird möglicherweise Müll gesammelt und verschwindet, bevor Sie das Ereignis veröffentlichen.

1

Dies ist die Grundschlüsselschritte Ereignis Aggregator

(1) Event erstellen Agg ..

public class Yourevent zu definieren: CompositePresentationEvent {

}

(2) Verlag vm

eventAggregator.Get(). Veröffentlichen (Objekt);

(3) Subscription Vm

Yourevent eventObj = eventAggregator.Get();

0

Der EventAggregator ist immer der gleiche, Sie müssen es von jedem Viewmodel übergeben. Prism und MEF kann dies für Sie tun:

  1. Sie Eventaggregator im Konstruktor mithilfe von Unity of PRISM

  2. laden können Sie einen Verweis von Eventaggregator mit MEF

0

injizieren Haben Sie eine Instanz von ViewModel "B" und ViewModel "A"? Veröffentlichen Sie das Ereignis, bevor der Abonnementcode ausgeführt wurde? Veröffentlichen sie beide das gleiche Event?

EventAggregator.GetEvent(Of MyEventType).Subscribe(Sub() 

                End Sub) 
Verwandte Themen