如何在返回时加载主页面();来自第二页?

时间:2011-06-28 03:47:34

标签: windows-phone-7

我使用NavigationService.Navigate("...")。但是当我点击事件goBack();

的后退按钮时,我想再次加载MainPage

8 个答案:

答案 0 :(得分:4)

在goBack方法中,您可以使用NavigationService.GoBack()调用从SecondPage移回MainPage。您可以在MSDN上查看可用的所有导航方法。

答案 1 :(得分:2)

您可以覆盖OnBackKeyPress方法,并在下面显示的方法编写代码中,它将导航到MainPage.xaml

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}

答案 2 :(得分:1)

如果您正在使用绑定,请执行以下操作:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
       App.ViewModel.LoadData();

    }

在MainViewModel.cs

  

public void LoadData()           {       的 Items.Clear();
              this.Items.Add(new ItemViewModel(){LineOne =“runtime one”,LineTwo =“Data info 2”});       this.IsDataLoaded = true; }

答案 3 :(得分:0)

就像Nigel所说,你可以使用NavigationService.GoBack()但是这只有你从MainPage转到第二页才有效。

执行此操作的唯一方法是您提到如何使用NavigationService.Navigate(uri)。

答案 4 :(得分:0)

覆盖导航到事件

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
       if (PhoneApplicationService.Current.State["msg"].ToString() == "from page2")
       {
         // do something when its comming from page2
       }
        base.OnNavigatedTo(e);
    }

现在每次导航时都会触发,但你可以发送一些参数,以便根据它来自哪个页面知道要做什么。

PhoneApplicationService.Current.State["msg"] = "from page2";
NavigationService.Navigate(new Uri("/MainPage.xaml?msg=", UriKind.Relative));

答案 5 :(得分:0)

有两种方法可以返回主页。

(第一种方法)覆盖OnBackKeyPress()并在其中写下以下代码段。

NavigationService.GoBack();

注意:

仅当MainPage是导航历史记录中的上一页时,才会移至MainPage。

(第二种方法)覆盖OnBackKeyPress()并在其中写下以下代码段。

NavigationService.Navigation(new Url("/MainPage.xaml",UriKind.Relative));

注意:

这将创建一个New MainPage并导航到它。因此,如果您从MainPage导航到SecondPage,并且如果使用上面的代码段再次导航到MainPage,则导航历史记录中将有两个MainPage。

因此,请根据您的方案使用任何一个代码段。

答案 6 :(得分:0)

如果WP7或WP8:NavigationService.GoBack()

如果是WP8.1:Frame.GoBack(); 并且您可以覆盖导航到事件

  

受保护的覆盖无效   OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){

// do nothing  }

答案 7 :(得分:0)

我不建议覆盖OnBackKeyPress方法并在其中调用NavigationService.Navigate方法,因为它可能会弄乱您的页面堆栈。

我认为您的应用有超过2页。否则你应该像其他人推荐的那样调用NavigateService.GoBack()。

实施例

  1. MainPage开始(backstack:
  2. 导航至 SecondPage (backstack: MainPage
  3. 导航至 ThirdPage (backstack: SecondPage MainPage
  4. 点击后退按钮(覆盖),您将进入 MainPage (Backstack: ThirdPage,SecondPage,MainPage
  5. 单击后退按钮,您将进入 ThirdPage (Backstack: SecondPage,MainPage )。这不是应用程序应该退出的预期行为。
  6. 现在你陷入了一个后退按钮循环。
  7. 解决方案

    覆盖OnNavigatingFrom并删除您不希望用户访问的任何backstack条目。您可以允许用户按后退按钮从ThirdPage返回MainPage,也可以调用NavigationService.GoBack()。

    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        base.OnNavigatingFrom(e);
    
        // Remove all backstack entries except for the first one
        while(NavigationService.BackStack.Count() > 1)
        {
            NavigationService.RemoveBackEntry();
        }
    }