【问题标题】:Navigation Source in Windows PhoneWindows Phone 中的导航源
【发布时间】:2013-04-08 13:07:56
【问题描述】:

我的申请中有 2 个页面,A 和 B。

如果我从应用程序外部导航到 A,我想显示一个消息框。如果我从 B 导航到 A,我不想显示任何内容。

有没有办法在 A 中识别启动导航的页面?即在 A.Loaded (或任何其他事件)中,我需要类似

if(pageFromWhichIAmComingFrom == B) 

OnNavigatedTo、OnNavigationFrom 和 OnNavigatedFrom 似乎对我没有帮助。

【问题讨论】:

  • A 是您应用的起始页吗?
  • 是的,A 是我的起始页。

标签: c# .net navigation windows-phone-8


【解决方案1】:

您可以使用PhoneApplicationService 类来存储有关您上次访问的页面的信息。例如,在页面 A 上使用OnNavigatedFrom

void OnNavigatedFrom(object sender, Eventargs e)
{
   PhoneApplicationService.Current.State["LastPage"] = "PageA";
}

然后在下一页检查:

void OnNavigatedTo(object sender, Eventargs e)
{
   if(PhoneApplicationService.Current.State["LastPage"].ToString() == "PageA")
   {
      // came from page A
   }
   else 
   {
       // came from a different page
   }
}

希望这会有所帮助!

更新:

我刚刚看到的另一件可能值得尝试的事情是使用NavigationService.BackStack 属性。我还没有尝试过,但它似乎应该可以工作。在您的OnNavigatedTo 事件处理程序中,您应该能够从堆栈中获取最后一个条目以查看您的最后一页。这会更简单,并且不需要您手动设置任何属性。示例:

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

    var lastPage = NavigationService.BackStack.FirstOrDefault();
}

找到here

【讨论】:

  • 成功了!我最终使用了你的第一个例子!我没有使用“普通”导航(使用导航服务),而是使用基于 MVVM 消息传递 PhoneApplicationFrame Navigation 的集中式导航服务(因此使用 Navigation BackStack 的方法对我不起作用,我已经尝试过了)。
  • 对于其他感兴趣的人,请记住首先检查 Current.State (if (PhoneApplicationService.Current.State.ContainsKey(InternalNavigationPageLinks.LastPageKey))) 中是否存在所需的密钥 - 我建议使用带有描述页面的常量的静态类并始终使用 @ 987654330@(或String.Compare)正确比较字符串。
  • 很高兴它有帮助,而且很重要!我忘了添加关于检查ContainsKey 的花絮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多