2015-03-25 15 views
17

Ich habe gerade meine erste xamarin.forms App entwickelt. Ich bin begeistert von Xamarin.forms, aber ich vermisse mehrere Ereignisse.Seitenlebenszyklusereignisse in xamarin.forms

Gibt es Seiten-Lifecycle-Ereignisse in einer Xamarin.forms ContentPage?

Ich kenne diese beide:

protected override void OnAppearing() 
{ 
} 

protected override void OnDisappearing() 
{ 
} 

Aber das OnAppearing() Ereignis nur einmal ausgelöst. Wenn ich auf Android den Startknopf drücke und zurück zu meiner App gehe, wird dieses Ereignis nicht erneut ausgelöst.

Gibt es eine Abhilfe dafür (wie OnNavigatedTo in WindowsPhone-Seiten)?

Danke.

Antwort

17

So wird das Ereignis OnAppearing ausgelöst, wenn Ihre Seite angezeigt wird. I.e. Sie haben von einem anderen im Stapel zu dieser Seite oder zurück zu dieser Seite navigiert. Es gibt derzeit keine Page Lifecycle Ereignisse wie Sie aus dem API documentation

sehen Ich denke, was Sie sprechen, wenn Sie Ihre Anwendung setzen in ihm zu schlafen und zurück zu navigieren die OnAppearing Ereignis nicht ausgelöst wird, Dies liegt daran, Ihre Seite hasn Es erschien nicht, weil es schon da war, die Anwendung schlief gerade.

Was Sie suchen ist die App Lifecycle, die Methoden wie beinhaltet:

protected override void OnStart() 
{ 
    Debug.WriteLine ("OnStart"); 
} 
protected override void OnSleep() 
{ 
    Debug.WriteLine ("OnSleep"); 
} 
protected override void OnResume() 
{ 
    Debug.WriteLine ("OnResume"); 
} 

Sie können dann die OnResume Ereignis verwenden zu tun, was Sie suchen.

Dieses Xamarin-Dokument enthält die Änderungen, die an alten Xamarin-Projekten vorgenommen werden müssen, um auf diese Ereignisse zuzugreifen. z.B. Ihre App Klasse in Ihrer gemeinsam genutzten Bibliothek muss von Xamarin.Forms.Application erben und Änderungen müssen auch an den AppDelegate und MainActivity vorgenommen werden.

+0

Ich dachte, es gibt einige andere Ereignisse, die ich verwenden können .. Aber jetzt kann ich das Problem lösen. Danke für die schnelle Antwort. – Joehl

6

Sie könnten auch Xamarin die MessagingCenter auszuführen willkürliche Koordination von Veranstaltungen nutzen: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

Ich habe die gleiche Sache vereitelt worden: nicht im Einklang Ansicht Lebenszyklusereignisse in Xamarin.Forms haben. Aber Sie können einige dieser Einschränkungen umgehen, indem Sie das MessagingCenter verwenden, das nur eine einfache Pub/Sub-Messaging-Einrichtung ist.

+0

Ich habe das MessagingCenter vorher benutzt, aber ich hatte nie die Idee, es für diesen Zweck zu verwenden. Gute Abhilfe, danke. – Joehl

+0

Ich habe auch eine inkonsistente Ereigniszyklen von Xamarin Android und UWP getroffen. Ich hatte eine erste Registerkarte, die CurrentPage der übergeordneten Seite verwendet, um das Appearing-Ereignis der zweiten Registerkarte auszulösen. Unter Android kann die Registerkarte "Erste" immer das Ereignis "Appearing" auslösen, nicht jedoch bei UWP. Das inkonsistente Problem wird von MessagingCenter gelöst. Vielen Dank! –

3

Das funktioniert für mich. Xamarin.Forms 2.0 und höher. Wenn Sie auf diese CP Seite zurückkehren, wird das Ereignis Appearing ausgelöst.

public CP:ContentPage 
    { 
     //.... 
     public CP() 
     { 
      this.Appearing += CP_Appearing ; 
      //... 
     } 

     private void CP_Appearing(object sender, EventArgs e) 
     { 
      Debug.WriteLine("*************HALLO******WELCOME BACK."); 
     } 
    }