pageState パラメータ

pageState パラメータの説明と使い方です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

pageState

  1. BasicPage を組み込むと Common のフォルダに Save, Load に必要なファイルが組み込まれます。
    また BasicPage1.xaml.cs に LoadState() と SaveState() が組み込まれています。
    これらのメソッドには、パラメータとして pageState が渡されます。
    最初に起動したときは LoadState() の pageState は null になっています。
    SaveState() で pageState に値をセットすると、中断したときや他のページに Navigate して戻ったときに、その値が渡されます。
    これを利用して、中断したページを復元することが出来ます。
    プログラムを終了したときは null が渡されるので注意して下さい。
  2. それではサンプルプログラムを作成してみましょう。
    Visual Studio for Windows 8 を起動して Blank App(XAML) を App1 の名前で構築します。
    Navigate する二枚の BasicPage ページを作成します。
    ソリューションエクスプローラから App1 を選択して [Add][New Item] から BasicPage1 と BasicPage2 を追加して下さい。
    ただし、次のことに注意して下さい。
    BasicPage を選択したときにメッセージが表示されますが、無視します。
    そのままではレイアウトウインドウが表示されません。
    一度コンパイルするとデザイン画面が表示されるようになります。
    BasicPageN(N=1,2,...) は Basic Page を追加したときの規定値です。
  3. MainPage.xaml をダブルクリックしてレイアウトウインドウを表示します。
    ツールボックスから Navigate する Button を貼り付けます。
    ボタンクリックの Event Handler("Button_Click") を作成して下さい。
    MainPage.xaml.cs の Button_Click() メソッドに BasicPage1 に遷移するコードを書きます。
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(BasicPage1), "AllGroups");
        }
        
  4. BasicPage1.xaml をダブルクリックしてレイアウトウインドウを表示します。
    ツールボックスから TextBox を3個貼り付けます。
    TextBoxの名前 説明
    data1 1件目のデータをタイプ
    data2 2件目のデータをタイプ
    ans 計算結果を表示
  5. data1, data2 を取得して、計算結果を ans に格納するボタン(Button_Click1)を貼り付けます。
    GCM, LCM の計算に代えて、減算を行うアプリケーションを材材にしました。
        private void Button_Click1(object sender, RoutedEventArgs e)
        {
            int d1, d2, comp;
            d1 = int.Parse(data1.Text);
            d2 = int.Parse(data2.Text);
            comp = d1 - d2;
            ans.Text = comp.ToString();
        }
        
  6. BasicPage1 から BasicPage2 に遷移するボタン(Button_Click2)を貼り付けます。
    BasicPage を使うと、戻るボタンが自動的に設定されます。
        private void Button_Click2(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(BasicPage2), "AllGroups");
        }
        
  7. BasicPage1.xaml.cs の LoadState() をコーディングします。
        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            if (pageState != null)
            {
                if (pageState.ContainsKey("Data1"))
                    data1.Text = pageState["Data1"].ToString();
                if (pageState.ContainsKey("Data2"))
                    data2.Text = pageState["Data2"].ToString();
                if (pageState.ContainsKey("Ans"))
                    ans.Text = pageState["Ans"].ToString();
            }
        }
        
  8. BasicPage1.xaml.cs の SaveState() をコーディングします。
        protected override void SaveState(Dictionary<String, Object> pageState)
        {
            pageState["Data1"] = data1.Text;
            pageState["Data2"] = data2.Text;
            pageState["Ans"] = "BasePage Save";
        }
        
  9. BasicPage2 には、戻るボタンが自動的に設定されるので操作は不要です。
  10. SaveState(), LoadState() の確認です。
    プログラムを起動して BasicPage1 に Navigate します。(MainPage ⇒ BasicPage1)
    data1 と data2 をタイプ入力して結果を表示します。
    この状態で BasicPage2 に Navigate して下さい。(BasicPage1 ⇒ BasicPage2)
    BasicPage2 から戻るボタンで BasicPage1 に戻ります。(BasicPage2 ⇒ BasicPage1)
    data1 と data2 には、タイプ入力した値が表示されているでしょうか。
    ans には "BasePage Save" が表示されます。
  11. LoadState() は OnNavigatedTo() から、SaveState() は OnNavigatedFrom() から呼ばれます。
    詳細は Common\ のフォルダの LayoutAwarePage.cs を参照して下さい。

超初心者のプログラム入門(C# Frame Work)