2012-06-29 28 views
0

我試圖保留頁面狀態,當我轉到另一頁面時,但由於某種原因,當我回到此頁面時,項目返回到其默認狀態。爲什麼它不起作用?這似乎遵循教程完美...Windows Phone保留頁面狀態不起作用

 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 


     State["Title"] = TitleTextBox.Text; 

     //all of those are RadioButtons - if their is a better way to do it then please comment :) 
     int i = new int(); 
     if (RB0.IsChecked.Value) 
      i = 0; 
     else if (RB1.IsChecked.Value) 
      i = 1; 
     else if (RB2.IsChecked.Value) 
      i = 2; 
     else if (RB3.IsChecked.Value) 
      i = 3; 
     State["CheckedRB"] = i; 

    } 

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 

     if (State.ContainsKey("Title")) 
      TitleTextBox.Text = State["Title"] as string; 
     if (State.ContainsKey("CheckedRB")) 
     { 
      int i = (int)State["CheckedRB"]; 

      if (i == 0) 
       RB0.IsChecked = true; 
      else if (i == 1) 
       RB1.IsChecked = true; 
      else if (i == 2) 
       RB2.IsChecked = true; 
      else if (i == 3) 
       RB3.IsChecked = true; 
     } 
    } 

編輯:我通過添加斷點跟蹤的問題。

  protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 


     State["Title"] = TitleTextBox.Text; 
     string look0 = WorkOutName.Text; 
     string look = State["WorkOutName"] as string; 

     int i = new int(); 
     if (RB0.IsChecked.Value) 
      i = 0; 
     else if (RB1.IsChecked.Value) 
      i = 1; 
     else if (RB2.IsChecked.Value) 
      i = 2; 
     else if (RB3.IsChecked.Value) 
      i = 3; 
     State["CheckedRB"] = i; <-------- breakpoint 

和這裏的結果:

(OnNavigatedFrom) 
look0 : "Text From TextBox" 
look1 : "Text From TextBox" 
i : (0, 1, 2, or 3) 

,並用相同的OnNavigatedTo:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 

     if (State.ContainsKey("Title")) 
      TitleTextBox.Text = State["Title"] as string; <--breakpoint 
     if (State.ContainsKey("CheckedRB")) 
     { 
      int i = (int)State["CheckedRB"]; <--breakpoint 

      if (i == 0) 
       RB0.IsChecked = true; 
      else if (i == 1) 
       RB1.IsChecked = true; 
      else if (i == 2) 
       RB2.IsChecked = true; 
      else if (i == 3) 
       RB3.IsChecked = true; 
     } 
    } 

和它們也都沒有(上的OnNavigatedTo)熄滅。

回答

1

我試過你的代碼,它似乎工作正常。我不知道這是不是你的情況,但要記住,如果你在應用中的以下導航流量:

Page1 (forward navigation)-> Page2 (back navigation)-> Page1 (forward navigation)-> Page2 

如果您保存在第二頁的狀態時,首先訪問過它,那麼該國將不會被保留當再次返回到Page2時,這是因爲當進行後退導航時,該頁面被丟棄,該頁面的狀態字典也被丟棄。你可以在documentation瞭解更多。