25 avril 2024

Restituer les données après une terminaison

Dans l’article précédent Restituer la navigation après une terminaison on a su revenir sur la bonne page de votre application. Ici on va remettre les données que l’utilisateur avait par exemple commencé à saisir.

Déclarer une variable static IsSuspending dans l’App.xaml.cs et la passer à TRUE dans l’évènement OnSupending

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
   
    IsSuspending = true;
   
    //Mémo de la page actuelle
    Frame frame = Windows.Current.Content as Frame;
    ApplicationData.Current.LocalSettings.Values["NavigationState"] = frame.GetNavigationState();

    deferral.Complete();
}

MaPage.Xaml.cs : OnNavigationFrom

Dans votre page, on va maintenant mémoriser les données dans l’évent OnNavigationFrom (on quitte la page) puis les restituer dans l’évent OnNavigationTo (On arrive sur la page) :

protected override void OnNavitationFrom(NavigationEventArgs e)
{
    bool suspending = ((App)App.Current).IsSuspending;
    if (suspending )
    {
       var composite = new ApplicationDataCompositeValue();
       composite["madonnee1"] = this.textBoxName.Text;
       composite["madonnee2"] = this.textBoxAge.Text;
       ApplicationData.Current.LocalSettings.Values["Mesdonnees"] = composite;
     
       //On peut utiliser ça aussi :
      //state["madonnee1"] = this.textBoxName.Text;
    }
}

MaPage.Xaml.cs : OnNavigationTo

Et au retour de la page, si c’est une nouvelle navigation on vide par sécu le « composite » sinon on regarde s’il existe et restitue les info :

protected overrire void OnNavigationTo (NavigationEventArgs e)
{
   if (e.NavigationMode == NavigationMode.New)
   {
       ApplicationData.Current.LocalSettings.Values.Remove("Mesdonnees");
   }
   else
   {
       if (ApplicationData.Current.LocalSettings.Values.ContainsKey("Mesdonnees"))
       {
          var composite = ApplicationData.Current.LocalSettings.Values["Mesdonnees"] as ApplicationDataCompositeValue;
          this.textBoxName.Text = (string)composite["madonnee1"];
          this.textBoxAge.Text = (string)composite["madonnee2"];
   
          ApplicationData.Current.LocalSettings.Values.Remove("Mesdonnees");
       }
   }
}

Laisser un commentaire