【问题标题】:PRISM Xamarin.Forms INavigationService understanding. [Continuation]PRISM Xamarin.Forms INavigationService 理解。 [继续]
【发布时间】:2019-09-23 17:44:33
【问题描述】:

我想知道下面链接中讨论的选项是否已经可以使用 Prism 进行。 PRISM Xamarin.Forms INavigationService understanding

使用 MasterDetail 的项目。

在没有 Prism 的 XF 中,使用 PushAsync,打开一个页面,而不用替换 MainPage,带有 NavigationBar 和后退按钮。

  • App.css
MainPage = new NavigationPage(new MyMasterPage()); 
  • 从 MyMasterPageViewModel.cs 调用 SecondPage
await _navigation.PushAsync(new SecondPage());

SecondPage 页面以模态方式打开,并带有 NavigationBar 和后退按钮。 我无法使用 Prism 重现同样的行为。

谢谢

【问题讨论】:

    标签: xamarin.forms prism


    【解决方案1】:

    要开始您的示例,您想要做的不是 MasterDetailPage 的使用方式。为了帮助这里,我将用一个简单的例子来说明。 MasterDetailPage 永远不应该被包裹在 NavigationPage 中,而 MasterDetailPage 的 Detail 应该是一个 NavigationPage,其中一些页面设置为它的内容。

    var page = new MasterDetailPage
    {
        Detail = new NavigationPage(new ContentPage())
    };
    

    在 Prism 中,假设您有一个名为 MainPage 的 MasterDetailPage,并且您已经注册了 NavigationPage 和一个名为 ViewA 的 ContentPage 以及另一个名为 ViewB。

    创建 MasterDetailPage 的正确方法是:

    _navigationService.NavigateAsync("MainPage/NavigationPage/ViewA");
    

    现在,如果您想从 ViewA 推送 ViewB,例如:

    _navigationService.NavigateAsync("ViewB");
    

    您会看到它被推送到带有导航的 NavigationPage 内部以返回 ViewA。现在假设您想强制它成为一个 Modal,您只需这样做:

    _navigationService.NavigateAsync("ViewB?useModalNavigation=true");
    

    【讨论】:

    • 嗨,Dan,感谢您的回答...我尝试了所有找到的选项,但没有按预期工作...我正在尝试将此项目转换为 PRISM ...(github.com/ionixjunior/YellowClone)。
    • 请注意,当您在菜单中选择“我的钱包”选项时,会打开“我的钱包”屏幕,但没有打开菜单的选项,而是带有导航栏和后退按钮。
    • 在 PRISM,我没有发现这种可能性。
    • 在过去的几年里,全世界有成千上万的开发人员成功地使用了 Prism。问题不在于棱镜。我很乐意为您提供进一步帮助,但您似乎需要我作为顾问的指导,而不是 StackOverflow 上的简单答案。
    • 好吧,这个项目只是一个例子。它在 NavigatioPage (MainPage = new NavigationPage (new MainView ());) 中实现了 MasterDetail,因此 PushAsync 打开的每个页面都将包含后退按钮。在 PRISM 中这是不可能的,或者它不像在没有 Prism 的 XF 中那样工作。谢谢。
    猜你喜欢
    • 2018-07-21
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多