2015-03-25 86 views
17

我剛開發了我的第一個xamarin.forms應用程序。我對xamarin.forms感到興奮,但我想念幾個事件。xamarin.forms頁面生命週期事件

xamarin.forms ContentPage中是否有任何頁面生命週期事件?

我知道這兩個:

protected override void OnAppearing() 
{ 
} 

protected override void OnDisappearing() 
{ 
} 

但OnAppearing()事件僅觸發一次。在Android上,當我按下開始按鈕並返回到我的應用程序時,此事件不會再次觸發。

是否有解決此問題的方法(如WindowsPhone頁面中的OnNavigatedTo)?

謝謝。

回答

17

因此,OnAppearing事件在您的頁面出現時觸發。即您已導航到該頁面或從堆棧中的另一頁面返回該頁面。目前還沒有Page Lifecycle事件,你可以從API documentation

我想你所談論的是,如果你把你的應用程序睡眠,然後返回到它的OnAppearing事件不解僱看,這是因爲你的頁面不是招沒有出現,因爲它已經在那裏,應用程序只是睡着了。

你要找的是App Lifecycle其中包括方法,如:

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

然後,您可以使用OnResume事件做你在找什麼。

該Xamarin文檔包含必須對舊Xamarin項目訪問這些事件的變化。例如您的共享庫中的App類必須繼承Xamarin.Forms.Application,並且還必須對AppDelegateMainActivity進行更改。

+0

我想有我可以使用一些其他事件。但現在我可以解決這個問題。感謝您的快速回答。 – Joehl 2015-03-25 10:48:45

6

你也可以使用Xamarin的MessagingCenter執行事件的任意協調:http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

我一直感到沮喪同樣的事情:沒有在Xamarin.Forms一致視圖生命週期事件。但是,您可以通過使用MessagingCenter來解決其中的一些限制,MessagingCenter只是一個簡單的發佈/訂閱消息傳遞工具。

+0

我已經使用了MessagingCenter,但我從未想到將其用於此目的。很好的解決方法,謝謝。 – Joehl 2015-03-27 06:59:57

+0

我也遇到了Xamarin Android和UWP的不一致事件週期。我有第一個標籤頁,它使用父頁的CurrentPage來觸發第二個標籤頁的顯示事件。在Android上,第一個標籤總是可以觸發出現事件,但是,在UWP上並不總是如此。不一致的問題由MessagingCenter解決。謝謝! – 2017-02-24 00:50:16

3

這是爲我工作。 Xamarin.Forms 2.0及以上版本。每當你回到CP頁面,就會觸發Appearing事件。

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

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