2012-09-16 14 views
35

Domande simili sono state poste prima, ma questa domanda si sforza di esplorare più opzioni e la capacità di passare oggetti complessi.Come passare valori (parametri) tra le pagine XAML?

La domanda è come passare parametri, ma ha davvero bisogno di essere suddiviso in tre parti ..

  1. Durante la navigazione tra le pagine in un'applicazione XAML come si fa a passare i parametri?
  2. Qual è la differenza tra l'uso della navigazione Uri e la navigazione manuale?
  3. Come possono essere passati oggetti (non solo stringhe) quando si utilizza la navigazione Uri?

Esempio di Uri navigazione

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

Esempio di navigazione manuale

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

La risposta a questa domanda vale per WP7, Silverlight, WPF e Windows 8.

Nota: c'è una pubblicità ifference tra Silverlight e Windows8

  • Windows Phone: le pagine vengono navigati all'utilizzo di un Uri e dati passati come una stringa di query o di un'istanza
  • Windows 8: le pagine vengono navigati al passando il tipo e parametri come oggetti

risposta

80

metodi per passare parametri

1. Utilizzando la stringa di query

È possibile passare i parametri attraverso la stringa di query, utilizzando questo metodo significa che devono convertire i dati in stringhe e l'URL li codificherà. Dovresti usare questo solo per passare semplici dati.

pagina Navigazione: Pagina

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

Destinazione:

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

2. Utilizzo NavigationEventArgs pagina

Navigazione:

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.."; 
    } 
} 
Pagina 0

Destinazione:

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

3.Uso della navigazione manuale

pagina Navigazione:

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

pagina Destinazione:

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

Differenza tra Uri e navigazione manuale

Penso che la differenza principale è il ciclo di vita delle applicazioni. Le pagine create manualmente vengono mantenute in memoria per ragioni di navigazione. Maggiori informazioni a riguardo here.

Passando oggetti complessi

È possibile utilizzare il metodo uno o due per passare oggetti complessi (consigliato). È anche possibile aggiungere proprietà personalizzate alla classe Application o memorizzare i dati in Application.Current.Properties.

+4

Si può inoltre notare che 'NavigationContext.QueryString.TryGetValue (" parametro ", parametro out)' deve essere richiamato dal seguente metodo: 'protected override void OnNavigatedTo (NavigationEventArgs e)' – vishal

Problemi correlati