RSS2.0 hr
カテゴリ
 連絡事項 (11)
 開発全般 未分類 (2)
 WEB開発 未分類 (1)
 C# (1)
 Java (2)
 PHP (1)
 Flash (1)
 WPF, Silverlight (6)
 Android (2)
 MySQL (1)
 ニコ窓 (66)
 Nico Rec Ctrlr (4)
 Live Seeker (8)
 Live Seeker Lite (4)
 Nico2ls (1)
 未完成ツール (7)
 TinyMCE (4)
 FFmpeg (6)
 Linux (1)
 PCパーツ関連 (1)
 掲載誌 (3)
コンテンツ一覧
最新記事
2021/11/24 00:00
東芝 dynabook KIRA V832/28HS のSSD換装
2015/01/12 12:00
ニコ窓の開発&公開終了
2014/05/04 00:00
ニコ窓 Ver3.015 公開
2014/04/27 00:00
ニコ窓 Ver3.014 公開
2014/03/08 00:00
ニコ窓 Ver3.013 公開
コンテンツ一覧
公開ツール
ニコ窓
ニコニコ生放送用
ブラウザ
ニコ窓
コンテンツ
■ Silverlightのナビゲーションフレームワーク2 - 2010/10/30 13:00:00

この間の続きで、ナビゲーションについてです。
(自分用のメモとしてまとめてみたのですが、図がないので分かりにくいです。)

ナビゲーションを使う方法は、この間まとめたサイトで解説されているのですが、ページ切り替え時にページ間でデータを受け渡す方法について、具体的に書いているサイトが見つからなかったため、そのあたりについてまとめてみます。

ページ間でデータを受け渡す場合の処理としては、以下の順になるかと思います。

・現在表示しているページの終了時に一時データを保存
・新しいページの表示時に一時データを取得

一時データをどこに格納して受け渡すかが、問題になります。

■ 一時データの受け渡し方法
以下のサイトでは、Resourcesプロパティ、分離ストレージ、サーバとの通信による方法について、少し触れられていました。

[idocsq.net] 次の画面にデータを渡す方法
http://idocsq.net/page/152

上記の3つ以外では、ルートページのオブジェクト(一時データ)を直接参照しても、一応、データの受け渡しはできそうです。

■ 一時データを受け渡す/受け取るタイミング

データを受け渡すタイミングは、ページ非表示時の OnNavigatedFrom メソッドで行い、データを受け取るタイミングは、ページ表示前に呼ばれる OnNavigatedTo メソッドで行えば良いかと思います。

[MSDN]
Page.OnNavigatedTo メソッド
http://msdn.microsoft.com/ja-jp/library/dd502839(v=VS.95).aspx
Page.OnNavigatedFrom メソッド
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.page.onnavigatedfrom(v=VS.95).aspx

■ 簡単な例

今回は、サーバへの保存はせず、Application リソース、MainPage のオブジェクトを利用する2種類の方法で、一時データの受け渡しをしたいと思います。

今回は、以下のクラスを一時データ用に使います。

■ 一時データ用の PageData クラス
namespace SL_NavigationTest { class PageData { public string Message { get; set; } } ... }

■ Application リソースで宣言する場合 …①

■ 一時データ用の PageData クラス (キー名:TestDataR)
<Application xmlns=...略...
  xmlns:local="clr-namespace:SL_NavigationTest">
  <Application.Resources>
      <local:PageData x:Key="TestDataR" Message="" />
  </Application.Resources>
...略...
</Application>

■ コードで宣言する場合…②

■ 一時データ用の PageData クラス (変数名: TestDataC)
namespace SL_NavigationTest
{
  public partial class MainPage : UserControl
  {
    public PageData TestDataC = new PageData();

    public MainPage()
    {
      InitializeComponent();
    }
  }
}

■ ページ切り替え時の処理

■ ページの処理例
namespace SL_NavigationTest.Views
{
  public partial class TestPage1 : Page
  {
    public TestPage()
    {
      InitializeComponent();
    }

    // ページ表示時の処理
    // 一時データの取得&表示
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
      // リソースの場合 …①
      var dataR = (App.Current.Resources["TestDataR"] as PageData);
      // 一時データの表示処理を行う
      msgTextBlockR.Text = "呼出し元:" + dataR.Message;

      // コードの場合…②
      var dataC = ((MainPage)App.Current.RootVisual).TestDataC;
      // 一時データの表示処理を行う
      msgTextBlockC.Text = "呼出し元:" + dataC.Message;
    }

    // ページ終了時の処理
    // 一時データの保存
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
      // リソースの場合…①
      var dataR = (App.Current.Resources["TestDataR"] as PageData);
      dataR.Message = msgTextBlockR.Text;

      // コードの場合…②
      var dataC = ((MainPage)App.Current.RootVisual).TestDataC;
      dataC.Message = msgTextBlockC.Text;
    }
  }
}
カテゴリ: WPF, Silverlight  ブックマーク: はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく  コメント( 0 )
【コメント一覧】
【新規コメント投稿】
お名前(最大20文字):  さん
コメント本文 (最大300文字、URL投稿不可):
P. 1 List
お知らせ
サイト情報
2015/01/12 00:00
ニコ窓の開発&公開を終了しました。
閲覧者数
今日: 5 昨日: 54
合計: 834693 (PV)
開始: 2010/03/11
ツールは公開終了しました。
リンクは自由に張って頂いて構いません。
管理人: motta
  はてなブックマーク Yahoo!ブックマーク Googleブックマーク Twitterでつぶやく
  RSS2.0 RSS2.0
  My Yahoo!
  livedoor Reader
  Windows Live
 
ACR WEB