web-dev-qa-db-fra.com

Événements de cycle de vie de page dans xamarin.forms

Je viens de développer ma première application xamarin.forms. Je suis enthousiasmé par xamarin.forms, mais je manque plusieurs événements.

Existe-t-il des événements de cycle de vie de page dans une page de contenu xamarin.forms?

Je connais ces deux:

protected override void OnAppearing()
{
}

protected override void OnDisappearing()
{
}

Mais l'événement OnAppearing () ne se déclenche qu'une seule fois. Sur Android, lorsque j'appuie sur le bouton Démarrer et reviens à mon application, cet événement ne se déclenche plus.

Existe-t-il une solution de contournement pour cela (comme OnNavigatedTo dans les pages WindowsPhone)?

Merci.

27
Joehl

Ainsi, l'événement OnAppearing est déclenché lorsque votre page apparaît. C'est à dire. vous avez accédé à cette page ou revenez à cette page à partir d'une autre dans la pile. Il n'y a actuellement pas de Page Lifecycle événements comme vous pouvez le voir dans la documentation API

Je pense que ce dont vous parlez, c'est que si vous mettez votre application en veille et y revenez, l'événement OnAppearing n'est pas déclenché, c'est parce que votre page n'est pas apparue parce qu'elle était déjà là, l'application juste endormi.

Ce que vous recherchez est le App Lifecycle qui inclut des méthodes telles que:

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

Vous pouvez ensuite utiliser l'événement OnResume pour faire ce que vous recherchez.

Ce document Xamarin inclut les modifications qui doivent être apportées aux anciens projets Xamarin pour accéder à ces événements. par exemple. votre classe App dans votre bibliothèque partagée doit hériter de Xamarin.Forms.Application et des modifications doivent également être apportées aux AppDelegate et MainActivity.

27
user1

Vous pouvez également utiliser MessagingCenter de Xamarin pour effectuer une coordination arbitraire des événements: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

J'ai été frustré par la même chose: ne pas avoir de vue cohérente voir les événements du cycle de vie dans Xamarin.Forms. Mais vous pouvez contourner certaines de ces contraintes en utilisant le MessagingCenter, qui n'est qu'une simple installation de messagerie pub/sub.

9
NovaJoe

Cela fonctionne pour moi. Xamarin.Forms 2.0 et supérieur. Chaque fois que vous revenez à cette page CP, l'événement Appearing est déclenché.

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

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