2016-08-21 4 views
0

Ich habe den Code auf einem der Aufrufereignis viewModel auf dem MainPageViewModel. Als ich mit „TRUE“ wieEventAggregator mehrere ausgelöst auf ein Ereignis

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{ 
    GetUserBooks(); 
}, true); 

abonnierte und dann mehrmals zwischen verschiedenen Seiten, dann bewegen, wenn dieses Ereignis genannt wird, feuert sie auf dem MainPageViewModel mehrmals. (Vielleicht MainPageVM mehrere Male erstellt?)

Wenn ich ohne „true“ subscribe wie

eventAggregator type.GetEvent<UpdateUserBooksEvent>().Subscribe(str => 
{ 
    GetUserBooks(); 
}); 

und gehen auf ein paar Seiten, dann wird das Ereignis nicht ausgelöst. (Vielleicht MainPageVM von Garbage Collector gelöscht?).

Wie kann ein Ereignis nicht mehrfach bearbeitet werden? Oder gefeuert, bevor Sie weit dann 1-2 Seiten navigieren.

Antwort

0

Die true bedeutet keepSubscriberReferenceAlive - das heißt, wenn Sie true Ihre Teilnehmer übergeben wird das Ereignis empfangen, obwohl er sollte jetzt tot sein, weil es nicht mehr referenziert wird. Das heißt, wenn Sie das Ereignis veröffentlichen, erhalten alle Abonnenten, die sich jemals angemeldet haben (mit true), das Ereignis. Wenn Sie von Ansicht A zu Ansicht B wechseln und jedes Mal, wenn ein neues Ansichtsmodell B abonniert, erhalten alle diese Ansichtsmodelle B das Ereignis.

Wenn Sie das Ereignis auf einem Ansichtsmodell empfangen möchten, das nicht mehr aktiv ist (und daher erfasst wird, wenn Sie nicht mit true abonnieren), möchten Sie das Ereignis wahrscheinlich woanders abonnieren, um darauf zu reagieren (in einem Dienst) ?) oder überhaupt nicht abonnieren (ein gesammeltes Ansichtsmodell muss nichts aktualisieren).

+0

Wie implementiert man Service in UWP, die immer von jeder VM jederzeit zugänglich ist? –

+0

Registrieren Sie es als Singleton mit Einheit (oder den von Ihnen verwendeten Container) und lassen Sie es in Ihre Ansichtsmodelle als Abhängigkeit injizieren. – Haukinger

Verwandte Themen