2013-11-26 9 views
8

Windows Phone 8の2つのページの間に単純な文字列を渡す必要があります。私はそれを行う最善の方法を探そうとしていますが、 Windows Phone 8で2つのページ間に単純な文字列を渡す最善の方法は何ですか。これは他のページに移動するために使用する方法です。Windows Phoneでページ間に文字列を渡す8

+1

http://developer.nokia.com/Community/Wiki/Passing_parameters_while_navigating_between_pages_on_Windows_Phone – YK1

+0

@Erikどの回答があなたにとって最適であったかを忘れずにチェックしてください。将来の人々はこれを見つけることができます。 –

答えて

19
文字列変数の場合

が、それはクエリ文字列パラメータを使用するのが最も簡単です:

NavigationService.Navigate(new Uri("/newpage.xaml?key=value", Urikind.Relative)); 

タールにそれを拾いますNavigationContext.QueryStringを使用してページを取得:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if (NavigationContext.QueryString.ContainsKey("key")) 
    { 
     string val = NavigationContext.QueryString["key"]; 
     // etc ... 
    } 
} 

注:あなたの文字列は英数字のみが含まれている場合は、上記の変更なしで動作します。しかし、文字列にURL予約文字(たとえば、&?)がある場合は、それらをURLエンコードする必要があります。これにはヘルパーメソッドUri.EscapeDataStringUri.UnescapeDataStringを使用してください。

string encodedValue = Uri.EscapeDataString("R&R"); 
NavigationService.Navigate(new Uri("/newpage.xaml?key=" + encodedValue, Urikind.Relative)); 

をアンエスケープへ:エスケープする

string encodedValue = NavigationContext.QueryString["key"]; 
string val = Uri.UnescapeDataString(encodedValue); 
+1

私はArgumentNullExceptionを取得します – Erik

+0

私はできるだけ早くこのコードを実行しようとします - 今私のアプリは私が再びurのコードをテストする前に安定しているように修正する必要があるいくつかの誤動作に走った – Erik

5

私は単純なデータ@McGarnagleのために、おそらくよりよい解決策であると言わざるを得ない。

これはまた、これを行うための非常に高速で汚れた方法でもあります。このメソッドは、複雑なオブジェクトも取り込むことができます。

私はその後、2ページにあなたがこの

var yourObject = PhoneApplicationService.State["KeyName"]; 

MSDN Documentation

+0

今すぐ実装することはできません - 私のアプリは奇妙な振る舞いをすることに決めましたが、できるだけ早く試してみます:) – Erik

+0

あなたのデータを保存したい場合は、この方法が良いと思います。 – Romasz

+0

@Romaszはい、あなたは正しい。これはデータを保存する非常に簡単な方法です。複雑なカスタムオブジェクトをxamlページ間で渡すのは非常に簡単です。それらを直列化したり、さらに悪化させたりする代わりに、それらを文字列形式に分割し、それらをURLに渡します –

0

がCaliburn.microを見てみましょうかDictionary<String,Object>

PhoneApplicationService.State.add("KeyName",YourObject); 

あるPhoneApplicationService.Stateを使用して好きです。設定するのはとても簡単で、あなたはこのように、強く型付けされた方法で、ビューを使用してパラメータを渡すことができます:あなたはMVVMアーキテクチャを使用している場合

public void GotoPageTwo() { 
     navigationService.UriFor<PivotPageViewModel>() 
      .WithParam(x => x.NumberOfTabs, 5) 
      .Navigate(); 
} 

http://caliburnmicro.codeplex.com/wikipage?title=Working%20with%20Windows%20Phone%207%20v1.1&referringTitle=Documentation

2

は、その後、あなたが使用して登録した後の文字列を渡すことができますメッセンジャー。 文字列(メッセージ)変数を持つモデルクラス(例:PageMes​​sage)を作成します。 あなたは、uはこのようなメッセンジャーに登録する必要があり、ちょうどnewpage.xamlでこの

Messenger.Default.Send(new PageMessage{message="Hello World"}); 

のようなメッセージを送るhomepage.xamlで、その後、newpage.xamlするhomepage.xamlから文字列を渡したい

Messenger.Default.Register<PageMessage>(this, (action) => ReceiveMessage(action)); 

private object ReceiveMessage(PageMessage action) 
{ 
    string receivedMessage=action.message; 
    return null; 
} 

このように、MVVMアーキテクチャでもナビゲーションを渡すことができます。

2

のHy、

他のソリューションと何が必要に応じて、文字列型の1つの以上の特性を持つ静的クラスを作成するには、それはあなたが必要な場所、それが利用可能であることの方法を強化します。

関連する問題