Xamarin Forms-使用ViewModels保存和检索棱镜导航堆栈

时间:2019-07-08 16:55:52

标签: c# xamarin.forms prism

我正在使用Prism进行导航来实现Xamarin Forms Mobile应用程序。

是否可以从Prism检索完整的导航堆栈以及视图模型?

要求是,如果用户处于工作流程的中间并且应用已关闭,则用户应该能够在启动新会话时继续工作流程。

所以我试图定期将整个导航堆栈保存到数据库中。

2 个答案:

答案 0 :(得分:0)

棱镜没有单独维护的NavigationStack。而是使用内置的Xamarin.Forms导航堆栈。如果您需要查看实际的导航堆栈,则可以从页面后面的代码中进行操作。如果您所需要做的只是获取当前页面的当前uri路径,则可以使用GetNavigationUriPath方法。

public static string GetNavigationUriPath(this INavigationService navigationService)
   {
        var currentpage = ((IPageAware)navigationService).Page;

        Stack<string> stack = new Stack<string>();
        currentpage = ProcessCurrentPageNavigationPath(currentpage, stack);
        ProcessNavigationPath(currentpage, stack);

        StringBuilder sb = new StringBuilder();
        while (stack.Count > 0)
        {
            sb.Append($"/{stack.Pop()}");
        }
        return sb.ToString();
    }

https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Forms/Navigation/INavigationServiceExtensions.cs

答案 1 :(得分:0)

您现在可以通过调用INavigationService.GetNavigationUriPath来获取页面的绝对导航路径。