質問については「良い方法はありますか?」です。このソリューションに加えて、アプリケーションの状態を使用してオブジェクト間でパラメータを渡すことを好む人もいます。たとえば、
PhoneApplicationService.Current.State["parameter"] = param;
var parameter = PhoneApplicationService.Current.State["parameter"];
共有クラスを使用することもできます。複雑なオブジェクトの場合は、両方のプロジェクトからアクセスできるクラスで静的パブリックメンバーを使用するのが最も簡単な方法です。
クエリ文字列ナビゲーションを使用するように選択した場合、クエリ文字列の一部の特殊文字が問題を引き起こす可能性があることに注意してください。ページ間でやり取りされるデータの内容を制御できない場合は、おそらく共有クラス解決策が優れています。たとえば、私たちのアプリケーションの1つでは、クエリ文字列にWebサイトの名前を渡しています。これらの名前に '&'文字(H & Mのような)が含まれる場合があります。この場合、クエリ文字列が壊れます。
ナビゲーション中にクエリ文字列を作成するのが面倒になる場合は、Caliburn.Microクラスとその中のUribuilderクラスをチェックアウトすることができます。それはあなたではなく素敵な(と流暢)構文でナビゲートすることができます:NavigationContextため
String parameter;
NavigationContext.QueryString.TryGetValue("Parameter", out parameter)
詳細:
navigation.UriFor<CandidateDetailsPageViewModel>()
.WithParam(x => x.CandidateId, candidate.Id)
.Navigate();
ナビゲーション後のパラメータを解析するとき、TryGetValue-方法はかなり便利です。 QueryStringが利用可能from MSDN.
HTTPUtility.UrlEncodeまたはUri.EscapeDataStringを使用すると、QueryStringで使用する文字列を安全にすることができます –