2012-01-31 5 views
0

複数のプロジェクトで使用したい共通のページがあります。したがって、これらのページを使用してクラスライブラリを構築したいと考えています。問題は、NavigationService.Navigate(新しいUri( "/ Common; component/SomeName.xaml"、UriKind.Relative))を使用してオブジェクトを渡すことができないことです。方法。Windows Phone 7で別のクラスライブラリ内のページに移動するにはどうすればよいですか?

私はクエスチングを渡すことができます。私が知りたいことは...

  1. クエリ文字列に渡すことができる文字列の数に制限はありますか?
  2. クエリ文字列の長さに制限はありますか?
  3. より良いまだ

あるいは、

は異なるクラスライブラリ内のページへのアプリケーションからオブジェクトを渡すのより良い方法はありますか?

答えて

1

質問については「良い方法はありますか?」です。このソリューションに加えて、アプリケーションの状態を使用してオブジェクト間でパラメータを渡すことを好む人もいます。たとえば、

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.

+1

HTTPUtility.UrlEncodeまたはUri.EscapeDataStringを使用すると、QueryStringで使用する文字列を安全にすることができます –

0

のご質問にお答えするには:

  1. ありませんあなたは私がこれに答えがイエスかもしれ信じるqyerystring
  2. に渡すことができる文字列の数に制限はありません。私は標準が<のURLを持っていると信じています

私は通常、私のページにクエリ文字列を渡すだけです。もっと複雑なケースでは、両方のライブラリが参照する共有静的ドメインクラスがあります。それから、私はこの変数に静的にアクセスすることができます。

関連する問題