按下按键时,上一页状态丢失

时间:2015-03-17 08:56:30

标签: c# windows-runtime windows-phone-8.1 win-universal-app

我正在创建一个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状态为空白,表现为新加载的屏幕。为什么? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我会尝试在构造函数/ XAML中设置NavigationCacheMode="Required"