【问题标题】:Correct use of Prism navigation service in xamarin forms在 xamarin 表单中正确使用 Prism 导航服务
【发布时间】:2017-05-03 19:38:24
【问题描述】:

我想确认我是否正确使用带有 xamarin 表单的 prism 导航服务。我有一个主详细信息页面、一个样式化的导航页面和一堆内容页面。

现在我正在通过以下方式使用该服务:

            var prj = await dataService.GetLwdProject(appState.SelectedProjectId);
            var nparam = new NavigationParameters();
            nparam.Add("Project", prj);
            await NavigateTo("RootPage/StyledNavigationPage/SessionsListPage", nparam);

Master 详细信息页面是 RootPage 对象。所以期望当用户从这个列表页面中选择一个项目时,服务的正确方式应该是:

                var nparma = new NavigationParameters();
                nparma.Add("Session", option);
                await App.NavigateTo("RootPage/StyledNavigationPage/SessionsListPage?ProjectId=" + option.ProjectId + "/LocationListPage", nparma);

我希望只将 LocationListPage 添加到导航堆栈中,但是当我使用 android 上的硬件后退按钮时,看起来不仅添加了最后一页,而且添加了整个路径(所有页面)。那么这是自动构造所需路径的正确方法吗?

【问题讨论】:

    标签: xamarin service xamarin.forms navigation prism


    【解决方案1】:

    没有。导航始终与您调用它的位置相关。您现在拥有的内容将导航到您每次创建的整个深层链接。只需导航到您的目标 NavigationPage/SessionListPage 并传递您的参数。不过,在这种情况下,您不会每次都获得一个新页面,因为您正在导航到同一个视图,但只是传递了不同的状态。

    【讨论】:

    • 我构建整个补丁的原因是这是我发现以预期方式创建页面的唯一方法。在路径上: RootPage/StyledNavigationPage/SessionsListPage 它本质上是一个主详细信息页面,其中导航页面指向 SessionsListPage,如果我只是写导航到 LocationListPage,则只显示一个简单的内容页面,因此没有导航栏或访问主详细信息页面.返回的唯一方法是使用硬件返回按钮。如果我将其表达为:StyledNavigationPage/LocationListPage,我将返回导航但没有返回按钮。
    • 你做得不对。为了实现您想要的行为,您的 NavigationPage 应该实现 INavigationPageOptions 并将 ClearNavigationStackOnNavigation 属性设置为 false。现在,当您从 MasterDetail 导航时,只要在 Detial 前面加上您的 navigationPage,它就不会重置堆栈,而是将每个页面推入堆栈。
    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多