2012-01-31 94 views
0

我想在多個項目中使用一組常用頁面。因此,我想用這些頁面構建一個類庫。問題是我無法使用NavigationService.Navigate(new Uri(「/ Common; component/SomeName.xaml」,UriKind.Relative))傳遞對象。方法。如何導航到Windows Phone 7中另一個類庫中的頁面?

我知道我可以傳遞查詢字符串。我想知道的是...

  1. 是否有任何限制你可以在查詢字符串中傳遞的字符串數量?
  2. 查詢字符串是否有長度限制?

或者更好的是,

是否有從一個應用程序傳遞對象到頁面的不同類庫中的更好的辦法?

回答

1

關於「有沒有更好的方法」的問題。除了你提到的解決方案之外,一些人喜歡使用應用程序的狀態來在對象之間傳遞參數。例如:

PhoneApplicationService.Current.State["parameter"] = param; 
var parameter = PhoneApplicationService.Current.State["parameter"]; 

另一種選擇是使用共享類。對於複雜的對象,我發現在一個可以從兩個項目中訪問的類中使用靜態公共成員通常是最容易的。

請注意,如果您選擇使用查詢字符串導航,查詢字符串中的某些特殊字符可能會導致問題。如果您無法控制在頁面之間傳遞的數據內容,那麼共享類的解決方案對您來說可能更好。例如,在我們的一個應用程序中,我們在查詢字符串中傳遞了網站的名稱。有些情況下,這些名稱可能包含'&'字符(如H & M),如果是,則查詢字符串將中斷。

導航時,如果構建查詢字符串變得麻煩,您可以查看其中的Caliburn.Micro和Uribuilder類。它可以讓你有一個相當不錯的(流暢)語法導航:

navigation.UriFor<CandidateDetailsPageViewModel>() 
    .WithParam(x => x.CandidateId, candidate.Id)     
    .Navigate(); 

導航後,解析參數時TryGetValue法可以是相當有用的:

String parameter; 
NavigationContext.QueryString.TryGetValue("Parameter", out parameter) 

更多細節NavigationContext。 QueryString可用from MSDN.

+1

您可以使用HTTPUtility.UrlEncode或Uri.EscapeDataString使字符串安全地在QueryString中使用 – 2012-01-31 07:41:03

0

回答您的問題:

  1. 沒有沒有限制爲字符串的數量,您可以在qyerystring
  2. 傳遞,我相信這個問題的答案也許是肯定的。我相信標準是有一個網址< 2000個字符

對於小項目,我通常只是傳遞查詢字符串到我的網頁。對於更復雜的情況,我有兩個庫都引用的共享靜態Domain類。然後我可以很容易地訪問這個變量。

相關問題