關於「有沒有更好的方法」的問題。除了你提到的解決方案之外,一些人喜歡使用應用程序的狀態來在對象之間傳遞參數。例如:
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.
您可以使用HTTPUtility.UrlEncode或Uri.EscapeDataString使字符串安全地在QueryString中使用 – 2012-01-31 07:41:03