簡體   English   中英

Windows Phone保留頁面狀態不起作用

[英]Windows Phone Preserving Page State not working

當我轉到另一個頁面時,我試圖保留頁面狀態,但是由於某些原因,當我返回此頁面時,項目將返回其默認狀態。 為什么不起作用? 似乎完美地遵循了教程...

        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上)都沒有熄滅。

我嘗試了您的代碼,它似乎工作正常。 我不知道這是否是您的情況,但請記住,如果應用程序中具有以下導航流程:

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

如果在第一次訪問時將狀態保存在Page2中,則再次返回Page2時將不會保留該狀態,這是因為進行反向導航時,該頁面將被丟棄,該頁面的狀態字典也將被丟棄。 您可以在文檔中閱讀有關此內容的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM