2015-03-25 3 views
17

Я только что разработал свое первое приложение xamarin.forms. Я в восторге от xamarin.forms, но мне не хватает нескольких событий.События жизненного цикла страницы в xamarin.forms

Есть ли какие-либо события жизненного цикла страницы в xamarin.forms ContentPage?

Я знаю, что из этих двух:

protected override void OnAppearing() 
{ 
} 

protected override void OnDisappearing() 
{ 
} 

Но OnAppearing() событие только срабатывает один раз. На Android, когда я нажимаю кнопку «Старт» и возвращаюсь в свое приложение, это событие не запускается снова.

Есть ли обходной путь для этого (например, OnNavigatedTo на WindowsPhone-страницах)?

Спасибо.

ответ

17

Так что событие OnAppearing вызывается, когда появляется ваша страница. То есть вы перешли на эту страницу или обратно на эту страницу из другого в стеке. Там в настоящее время нет Page Lifecycle событий, как вы можете видеть из API documentation

Я думаю, что вы говорите, если вы поставите приложение спать и вернуться обратно в него OnAppearing событие не уволят, это потому, что ваша страница hasn Появился, потому что он уже был там, приложение просто спало.

Что вы ищете является 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, и также необходимо внести изменения в AppDelegate и MainActivity.

+0

Я думал, что есть некоторые другие события, которые я могу использовать .. Но теперь я могу решить эту проблему. Спасибо за быстрый ответ. – Joehl

6

Вы также можете использовать MessagingCenter Xamarin для выполнения произвольной координации событий: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

Я был разочарован тем же вещь: не имеющий последовательные вид жизненного цикла событий в Xamarin.Forms. Но вы можете обойти некоторые из этих ограничений с помощью MessagingCenter, который представляет собой просто средство обмена сообщениями/суб-сообщениями.

+0

Я использовал MessageCenter bevore, но у меня никогда не было идеи использовать его для этой цели. Хорошее обходное решение, спасибо. – Joehl

+0

Я также встретил противоречивые циклы событий Xamarin Android и UWP. У меня была закладка «Первая», в которой используется CurrentPage родительской страницы для запуска события «Вторичная страница». На Android первая вкладка всегда может запускать событие Appearing, однако, в UWP, не всегда. Непоследовательная проблема решена с помощью MessagingCenter. Спасибо! –

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."); 
     } 
    } 
Смежные вопросы