【问题标题】:WP7 determining which page I navigated fromWP7 确定我从哪个页面导航
【发布时间】:2010-11-01 19:31:20
【问题描述】:

我有 3 页。第 1 页是搜索条件,第 2 页是列表,第 3 页是详细信息。

如果我从第 1 页转到第 2 页,我想调用 Web 服务并将详细信息加载到页面上。

如果我从第 3 页转到第 2 页(即使用后退按钮),我不想重新加载数据,因为我已经拥有它。

要确定激活第 2 页时要做什么,我需要知道我来自哪里。

我在导航事件中看不到任何告诉我这一点的内容。

有什么想法吗?

干杯

史蒂夫

【问题讨论】:

  • 为什么不检查您是否已经拥有数据?
  • 是的 if(data == null) Load();那是最好的
  • 我无法检查我是否有数据,因为 VM 是单例,但您的建议帮助我弄清楚如何使用数据加载标志并使用 navigatingcanceleventargs 检查我是否正在移动返回我的列表页面或离开我的列表页面。

标签: silverlight navigation windows-phone-7


【解决方案1】:

作为一种新的(以及更好的?)解决方案,您应该考虑使用新的(2010 年 12 月 9 日)Non-Linear Navigation Service

【讨论】:

    【解决方案2】:

    API/SDK 无法按原样执行此操作。

    但是,您可以让调用页面告诉 page3 调用它的内容。
    如何做到这一点的一个例子是在查询字符串中包含一个条目。即

    NavigationService.NavigateTo(new Uri("page3.xaml?from=page2", UriKind.Relative));
    

    然后,在第 3 页:

    string sourcePage;
    
    if (NavigationContext.QueryString.TryGetValue("from", out sourcePage))
    {
        // test the value of sourcePage and act accordingly
    }
    

    【讨论】:

    • 这会导致一个小问题,尽管用户反击,但您的导航堆栈将继续增长和增长
    • @viggity No. 为什么这么说?
    • 因为你永远不会“返回”,你只会(导航服务认为)一个新页面。
    • @viggity 你声称即使你点击“返回”,后面的堆栈也会增长。绝不可能是这样。
    【解决方案3】:

    或者,您可以在应用程序的资源字典中添加一个新条目,并通过覆盖 OnNavigatedTo 方法在下一页检索它。

    添加条目:

    App.Current.Resources.Add("from",2);
    

    检索条目:

    if(App.Current.Resources.Contains("from")
    {
       lastPage = (int)App.Current.Resources["from"];
    }
    

    欲了解更多信息,请参阅以下链接的 Charles Petzold 书籍第 6 章:
    http://www.charlespetzold.com/phone/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2012-09-30
      相关资源
      最近更新 更多