2012-09-16 32 views
35

Se han formulado preguntas similares anteriormente, pero esta pregunta se esfuerza por explorar más opciones y la capacidad de pasar objetos complejos.¿Cómo pasar valores (parámetros) entre páginas XAML?

La pregunta es cómo pasar parámetros pero realmente tiene que ser dividido en tres partes ..

  1. Al navegar entre las páginas de una aplicación XAML ¿cómo pasar parámetros?
  2. ¿Cuál es la diferencia entre utilizar la navegación de Uri y la navegación manual?
  3. ¿Cómo se pueden pasar los objetos (no solo las cadenas) cuando se utiliza la navegación Uri?

Ejemplo de Uri navegación

page.NavigationService.Navigate(new Uri("/Views/Page.xaml", UriKind.Relative)); 

Ejemplo de navegación manual de

page.NavigationService.Navigate(new Page()); 

La respuesta a esta pregunta se aplica a WP7, Silverlight, WPF y Windows 8.

Nota: Hay anuncio iferencia entre Silverlight y Windows8

  • Windows Phone: páginas se puede navegar a la utilización de un URI y datos que se pasan como una cadena de consulta o una instancia
  • Windows 8: páginas se puede navegar a pasando el tipo y parámetros como objetos

Respuesta

80

métodos para pasar parámetros

1. el uso de la cadena de consulta

Puede pasar parámetros a través de la cadena de consulta, usar este método significa tener que convertir sus datos a cadenas y codificarlos en la URL. Solo debe usar esto para pasar datos simples.

página Navegación: página

page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative)); 

Destino:

string parameter = string.Empty; 
if (NavigationContext.QueryString.TryGetValue("parameter", out parameter)) { 
    this.label.Text = parameter; 
} 

2. Uso de la página NavigationEventArgs

Navegación:

page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative)); 

// and .. 

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    // NavigationEventArgs returns destination page 
    Page destinationPage = e.Content as Page; 
    if (destinationPage != null) { 

     // Change property of destination page 
     destinationPage.PublicProperty = "String or object.."; 
    } 
} 
página 0

Destino:

// Just use the value of "PublicProperty".. 

3.El uso de la navegación manual

página Navegación:

page.NavigationService.Navigate(new Page("passing a string to the constructor")); 

página Destino:

public Page(string value) { 
    // Use the value in the constructor... 
} 

Diferencia entre Uri y la navegación manual de

Creo que la diferencia principal aquí es el ciclo de vida de la aplicación. Las páginas creadas manualmente se guardan en la memoria por razones de navegación. Lea más al respecto here.

pasar objetos complejos

puede utilizar el método uno o dos para pasar objetos complejos (recomendado). También puede agregar propiedades personalizadas a la clase Application o almacenar datos en Application.Current.Properties.

+4

Cabe señalar también que 'NavigationContext.QueryString.TryGetValue (" parameter ", out parameter)' necesita ser llamado desde el siguiente método: 'protected override void OnNavigatedTo (NavigationEventArgs e)' – vishal

Cuestiones relacionadas