【问题标题】:WP7: Is it possible to navigate to a page in the backstack instead of creating a new instance of that page?WP7:是否可以导航到后台堆栈中的页面而不是创建该页面的新实例?
【发布时间】:2011-10-24 18:45:24
【问题描述】:

我有一个 Windows Phone 7.1 应用程序,其中包含三个页面,每个页面上都有 3 个按钮:第一个按钮指向第一个页面。 1,第二个导致页码。 2和第三导致页码。 3.

问题是,如果我转到第 1 页,然后转到第 2 页 - 然后如果我单击第一个按钮导航到第一页,则会创建该页面的新实例。我不想创建新实例,而是想从后台堆栈导航到页面的现有实例。

有可能吗?

【问题讨论】:

    标签: windows-phone-7


    【解决方案1】:

    是的,您需要通过触发返回手动向后导航(主要相当于用户按下返回按钮):

    NavigationService.GoBack();

    这将利用操作系统维护的后台堆栈。它将弹出第 2 页并恢复第 1 页。请注意,您无法选择要返回的页面,如果有要返回的页面,则返回一页。因此,例如从第 3 页触发向后导航将带您到第 2 页,您不能选择第 1 页。

    或者,但不建议,您可以在 7.1 中从后台堆栈弹出页面:

    NavigationService.RemoveBackEntry();

    然后您可以手动导航到该页面。但说真的,尽量不要这样做,因为它会破坏用户的期望,除非您自己管理页面支持。

    【讨论】:

    • 我明白了。我知道 GoBack() 方法,但我正在寻找一种方法来选择要返回的页面。将它们从后台堆栈中删除并一次只保留一个页面实例绝对是一种解决方案。我为什么要这样做:如果您使用的应用程序可以像我上面描述的那样工作 5 分钟,并且您会在页面之间浏览 20 次,那么您需要回击 20 次才能关闭该应用程序。
    • 不,你不会,如果你在页面之间导航时使用GoBack 在适当的地方这样做,它会从堆栈中弹出你来自的页面。在您的情况下,如果处理得当,您的堆栈最多应该只有 2 页大。此外,在页面之间切换的按钮也不符合用户的期望。如果用户在第 2 页并想进入第 1 页,他们非常很有可能会使用返回按钮。
    • @AdamHouldsworth 抱歉出现死线程,但我对But seriously, try not to do that as it breaks user expectations, unless you manage page backing yourself. 有疑问,在我的场景中,我有页面:MainMenu(带有产品)-> 设置-> ListOfStores -> StoreDetails(这里是用户可以确认选择的商店,这会触发 MainMenu 的更新)。如何在不使用非线性导航服务的情况下以“用户预期”的方式选择商店后返回主页?
    • @AdamHouldsworth 我的意思是,当然,我每次都可以将用户返回到上一页,但这会让用户每次都做一些额外的操作。
    • @VitaliiVasylenko 如果您自己管理后台状态,那么这种方法就可以了。
    【解决方案2】:

    您会更适合使用诸如 MVVM 之类的框架来控制您的数据,而不是依赖于页面的特定实例,但仍会记住用户在该页面上的位置。

    MVVMLight 是一个不错的选择 - http://mvvmlight.codeplex.com/

    然后,您只需要在应用内更好地控制导航,以决定应用应如何流动,而不是依赖于后台堆栈。 Back 只是根据用户的选择返回,而不是你的应用程序的流向(不要依赖它)。

    删除 mango 中的返回条目等功能是解决用户导航回家的老问题的一种解决方法,并且您希望防止返回到应用流程中的无效点。

    【讨论】:

    • 数据控制不是问题,我已经在使用MVVM了。我只是担心这可能会影响性能。
    【解决方案3】:

    您可以将NavigationService.Navigate(new Uri.. 与非线性导航服务结合使用。如果您已经在该页面上,这将为您执行 back.back.back。 http://create.msdn.com/en-us/education/catalog/article/nln-serv-wp7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多