2016-05-15 6 views
2

Mein Szenario ist wie folgt: Wenn ich die Zurück-Taste auf meinem Handy drücke, möchte ich vom aktuellen aktiven Viewmodel zu einer anderen Ansicht navigieren. Ich würde mich gerne auf den eventAgrivator verlassen, weil es cool ist. Das Initialisieren des gesamten Prismenteils ist jedoch etwas schwierig, da wir das von "App.cs" machen. Ich habe versucht, einen Weg zu finden, die Initialisierung von "MainActivity" zu starten, aber dann wie registriere ich das Zeug im Container wenn ich zu diesem Zeitpunkt keinen Container habe?Prism für Xamarin.Forms: EventAggregator von der Plattform projects

Also meine Frage kurz, wie benutze ich den EventAggrigator, um eine Nachricht zu senden?

Antwort

2

Eine Möglichkeit wäre, eine statische Eigenschaft belichten aus der Applikation, die einfach das Ereignis Aggregator zurückkehrt und dann verwenden, den IEventAggregator in Ihrer Plattform Projekten

+0

Danke, wäre aber nett, wenn Sie es geschafft haben, die Initialisierung von der Plattform (wo alles beginnt) zu starten. – BraveHeart

+1

Nun, im Wesentlichen tut es. Wo heißt LoadApplication (neue App()); Dann fängt es an. So kommt es genau dort vor, wo alles andere ist. –

2

Dank Brian zuzugreifen.

Ich habe mehr oder weniger getan, was Sie in dem folgenden Code vorgeschlagen und es arbeitete.

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 
    { 
     private IUnityContainer _container; 
     protected override void OnCreate(Bundle bundle) 
     { 

      base.OnCreate(bundle); 

      global::Xamarin.Forms.Forms.Init(this, bundle); 
      var application = new App(); 
      _container = application.Container; 
      LoadApplication(application); 
     } 

     public override bool OnKeyDown(Keycode keyCode, KeyEvent e) 
     { 
      switch (e.KeyCode) { 
       case Keycode.Back: 
        var eventAggregator = _container.Resolve<IEventAggregator>(); 
        eventAggregator.GetEvent<BackButtonPressed>().Publish(new object()); 
        break; 
      } 
      return true; 
     } 

    }