web-dev-qa-db-fra.com

Passer quelques paramètres entre les pages dans UWP

J'essaie de porter certains projets Windows Phone 8 sur l'UWP actuel et je suis coincé dans ce code d'extrait que j'ai utilisé dans un ancien projet.

 private void Restaurant_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        string types = "restaurant";
        string title = "restaurant";
        string url = string.Format("/NearbyPlaces.xaml?latitude={0}&longitude={1}&types={2}&title={3}", LocationLatitude.Text, LocationLangitude.Text, types, title);
        NavigationService.Navigate(new Uri(url, UriKind.Relative));

    }

Dans ce code, j'ai utilisé NavigationService pour passer certains paramètres à une autre page. Je ne pouvais plus utiliser NaigationService car UWP ne le prend pas en charge. J'ai essayé d'utiliser cela dans mon projet UWP, mais je pense que cela ne supportait que le passage d'un paramètre, CMIIW.

 private void restaurant_tapped(object sender, TappedRoutedEventArgs e)
    {
        string types = "restaurant";
        string title = "restaurant";
        Frame.Navigate(typeof(placeResult), latLoc.Text, longLoc.Text, types, title);
    }

Ce code me donne une erreur, car il prend 5 arguments, soit +2 surcharges. Ma question est de savoir comment faire de manière appropriée pour passer certains paramètres dans le projet UWP?

22
hamdanjz4

Ce que vous avez réussi dans Windows (Phone) 8 n'était qu'un simple string qui incluait tous vos paramètres. Vous deviez les analyser dans la méthode OnNavigatedTo() de votre page cible. Bien sûr, vous pouvez toujours le faire et passer une chaîne à la méthode Frame.Navigate().

Mais depuis UWP, vous pouvez passer des objets complets à d'autres pages. Alors pourquoi ne créez-vous pas une petite classe qui inclut tous vos paramètres et passez une instance de cela?

Votre classe pourrait ressembler à:

public class RestaurantParams
{
    public string Name { get; set; }
    public string Text { get; set; }
    // ...
}

Et puis passez-le via:

var parameters = new RestaurantParams();
parameters.Name = "Lorem ipsum";
parameters.Text = "Dolor sit amet.";
// ...

Frame.Navigate(typeof(PageTwo), parameters);

Sur votre page suivante, vous pouvez désormais y accéder via:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    var parameters = (RestaurantParams)e.Parameter;

    // parameters.Name
    // parameters.Text
    // ...
}

Où Parameter est la fonction qui récupère les arguments.

J'espère que cela pourra aider.

47
Robin-Manuel Thiel