2015-03-25 88 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."); 
     } 
    }