unity - Pasar algunos parámetros entre páginas en UWP.
uwp vs wpf (1)
Intento trasladar algunos proyectos de Windows Phone 8 a UWP actual y me quedo atascado en este fragmento de código que he usado en el proyecto anterior.
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));
}
En ese código, usé NavigationService para pasar algunos parámetros a otra página. Ya no podía usar NaigationService porque UWP no lo admite. He intentado usar esto en mi proyecto UWP, pero creo que solo se admite para pasar un parámetro, 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);
}
Ese código me da un error, porque toma 5 argumentos, que son +2 sobrecargas. Mi pregunta es ¿cómo hacerlo de manera adecuada para pasar algunos parámetros en el proyecto UWP?
Lo que pasaste en Windows (teléfono) 8 ha sido una simple string
que incluye todos tus parámetros. Tuvo que analizarlos en el método OnNavigatedTo()
de su página de destino. Por supuesto, todavía puedes hacer eso y pasar una cadena al método Frame.Navigate()
.
Pero desde UWP puedes pasar objetos completos a otras páginas. Entonces, ¿por qué no creas una clase pequeña que incluye todos tus parámetros y pasas una instancia de eso?
Tu clase podría verse como:
public class RestaurantParams
{
public string Name { get; set; }
public string Text { get; set; }
// ...
}
Y luego pasarlo a través de:
var parameters = new RestaurantParams();
parameters.Name = "Lorem ipsum";
parameters.Text = "Dolor sit amet.";
// ...
Frame.Navigate(typeof(PageTwo), parameters);
En tu próxima página ahora puedes acceder a ellos a través de:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var parameters = (RestaurantParams)e.Parameter;
// parameters.Name
// parameters.Text
// ...
}
Donde Parámetro es la función que recupera los argumentos.
Espero que ayude.