気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
本日は、Windows Phoneのページ間でデータを受け渡しする方法をご紹介します。

現在、開発中のホテル検索のアプリは、検索結果一覧から、ホテルの詳細を表示するところまで進みました。



検索結果一覧から、ホテル詳細に遷移する際は、ホテルNoを一覧画面から詳細画面に受け渡す
必要がありましたが、以下のように、QueryStringを利用して行いました。

まず、受け渡す方の一覧画面の方のソースです。
    NavigationService.Navigate(
              new Uri(String.Format("/Pages/HotelDetailPage.xaml?hotelNo={0}",seletedInfo.HotelNo), UriKind.Relative)
    );


Windows Phoneのページ遷移はNavigationSeriveのNavigate()メソッドを使用して行いますが、
その際、遷移先ページの後ろにクエリストリングを付与することで、データを遷移先ページに
受け渡すことが出来ます。

受け側の詳細画面では、以下のようにしてパラメータを受取ります。

  protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
  {
      String hotelNo;
      NavigationContext.QueryString.TryGetValue("hotelNo", out hotelNo);
      GetHotelDetailInfo();
  }

このようにQueryStringを使用する方法はとてもシンプルで良いのですが、
パラメータが増えた場合、ちょっと面倒です。

例えばあるクラスのプロパティの内容を全て引渡しする場合、一度それらを
パラメータとして、QueryStringに展開する必要があります。

このようなケースに使用できる方法として、Windows Phoneアプリケーション(Siverlightアプリケーション)を
カプセル化している、System.Windows.Applicationクラスを使用する方法があります。

Applicationクラスの静的プロパティ「Current」には、現在のアプリケーションのApplicationインスタンスが
格納されています。このプロパティで取得できるインスタンスのクラスは、「App.xaml.cs」で定義されている
「App」クラスのインスタンスです。

従って、Appクラスにページ間で共有したい情報を定義しておけば、Application.Currentを通して、
そのインスタンスにアクセスし、そのプロパティを参照することが可能になります。

今回開発しているアプリでは、以下のようにホテルの詳細情報を管理するクラスの
プロパティをAppクラスに追加しました。

「App.xaml.cs」
   public HotelDetailInfo HotelDetailInfo { get; set; }

これらのプロパティには、以下のようにして、各ページからアクセスすることが可能です。

   (Application.Current as App).HotelDetailInfo = detailInfo;

共有するプロパティが増える場合は、Dictionaryなどを
Appクラスに定義しておいて、その中で管理する方法を採用した方が良いかもしれません。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/109-a438763c

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。