2012-09-16 71 views
35

以前也有類似的問題,但這個問題試圖探索更多的選擇和傳遞複雜對象的能力。如何傳遞XAML頁面之間的值(參數)?

的問題是如何傳遞參數,但它確實需要被分成三個部分..

  1. 當在一個XAML應用程序如何傳遞參數的網頁間導航?
  2. 使用Uri導航和手動導航有什麼區別?
  3. 在使用Uri導航時,如何傳遞對象(不僅僅是字符串)?烏里導航實施例的手動導航的

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

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

回答這個問題適用於WP7,Silverlight中,WPF和Windows 8.

注意:有廣告Silverlight和Windows8的

之間。差分
  • 的Windows Phone:頁面瀏覽到使用URI並作爲查詢字符串或實例傳遞的數據
  • Windows 8:頁面被傳遞型導航到,並且參數作爲對象

回答

80

方法來傳遞參數

1.使用查詢字符串

您可以通過查詢字符串傳遞參數,使用此方法意味着必須將數據轉換爲字符串並對其進行url編碼。你只能用這個來傳遞簡單的數據。

導航頁:

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

目的地頁:

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

2.使用NavigationEventArgs

導航頁:

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

目標頁:

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

3。使用手動導航

導航頁:

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

目的地頁:URI和手動導航之間

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

差異

我覺得這裏的主要區別是應用程序的生命週期。爲了導航的原因,手動創建的頁面保存在內存中。詳細瞭解它here

傳遞複雜對象

可以使用方法的一個或兩,通過複雜的對象(推薦)。您還可以將類的自定義屬性添加到Application類中,或將數據存儲在Application.Current.Properties中。

+4

另外需要注意的是'NavigationContext.QueryString.TryGetValue(「parameter」,out參數)'需要從以下方法中調用:'''''''''''''''''' – vishal