按下后退键时上一页状态丢失

Previous Page state lost on back key press

我正在创建一个 Windows Phone 8.1 通用应用程序。我的应用程序上有一些屏幕。在第一个屏幕上,我将屏幕导航到第二个屏幕。当我在第二个屏幕上按下硬件后退按钮时。我之前的页面状态丢失了。

我无法纠正问题出在哪里。这是下面的代码:

屏幕 1 代码

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        this.navigationHelper.OnNavigatedTo(e);
        this.NavigationCacheMode = NavigationCacheMode.Enabled;
        if (e.NavigationMode == NavigationMode.New)
        {
            BindQuickDateComboBox();

            if (Frame.BackStack.Count > 0)
            {
                var lastPage = Frame.BackStack.Last().SourcePageType;

                if (lastPage != null && lastPage.FullName == "Cryoserver.AppLogin")
                {
                    Frame.BackStack.Clear();
                }
            }
        }
    }

async private void appBarSearch_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            if (IsValidateForm())
            {
                ProgressBar.IsVisible = true;
                cmdBarSearch.IsEnabled = false;

                if (await conn.Table<SearchQuery>().CountAsync() > 0)
                {
                    await conn.DropTableAsync<SearchQuery>();
                    await conn.CreateTableAsync<SearchQuery>();
                }

                var searchTerms = new SearchQuery();
                if (Convert.ToString(cmbQuickDate.SelectedItem) != "Any Date")
                {
                    searchTerms.FromDate = pickerFromDate.Date.ToString("d MMM yyyy");
                    searchTerms.FromTime = pickerFromTime.Time.ToString();
                    searchTerms.ToDate = pickerToDate.Date.ToString("d MMM yyyy");
                    searchTerms.ToTime = pickerToTime.Time.ToString();
                }
                searchTerms.SearchKeywords = txtKeywords.Text;
                searchTerms.Parties = txtParties.Text;
                searchTerms.Contributer = txtFrom.Text;
                searchTerms.Viewer = txtTo.Text;
                searchTerms.AttachmentName = txtAttName.Text;
                searchTerms.AttachmentKeywords = txtAttKeywords.Text;
                searchTerms.SearchReason = txtSearchReason.Text;
                searchTerms.IsHighLight = "false";

                await conn.InsertAsync(searchTerms);

                object resultMails = await SearchEmailArchive();

                if (!String.IsNullOrEmpty(Convert.ToString(resultMails)))
                {
                    GlobalInfo.SelectedRow = -1;
                    GlobalInfo.SearchPageIndex = -1;
                    GlobalInfo.IsFindKeyword = false;

                    var archiveMails = JsonConvert.DeserializeObject<SearchResult>(resultMails.ToString());

                    Frame.Navigate(typeof(MailList), archiveMails);
                }

                ProgressBar.IsVisible = false;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            ProgressBar.IsVisible = false;
        }
        cmdBarSearch.IsEnabled = true;
    }

private void Page_Loaded(object sender, RoutedEventArgs e)
    {

    }

屏幕 2

我也在第二个屏幕中使用了此代码,并且在删除此代码后也使用了此代码。但这对我不起作用。还是一样的问题。

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    if (Frame.CanGoBack)
    {
        e.Handled = true;
        Frame.GoBack();
    }
}

屏幕 1 状态为空白,表现为新加载的屏幕。为什么? 任何帮助将不胜感激。

我会尝试在 constructor/XAML 中设置 NavigationCacheMode="Required"