【问题标题】:Prism xamarin Doubts .Can you clarify?棱镜 xamarin 怀疑。你能澄清一下吗?
【发布时间】:2017-07-27 08:32:17
【问题描述】:

我正在尝试了解 Prism Xamarin 导航以及如何与 xamarin 本身相关联

有人可以纠正我的错误吗?

    Xamarin                       Prism
    Navigation.PopAsync =   NavigationService.NavigateAsync(uri,
                                                            useModalNavigation: true)       
                        =   NavigationService.GoBackAsync

    Navigation.PushAsync =  NavigationService.NavigateAsync(uri,
                                                            useModalNavigation: false)       

也在棱镜中

Is NavigationService.NavigateAsync(uri,useModalNavigation: false)   

NavigationService.GoBackAsync

他们都在做同样的事情吗?

OnNavigatingTo(NavigationParameters 参数) vs OnNavigatedTo(NavigationParameters 参数)

它们都在构造函数被触发后被触发。 有什么实际例子,什么时候用一个,什么时候用另一个?

你在那里放置什么样的逻辑。当你想加载表单时使用它们吗?通常还有你在那里放置什么样的验证以及为什么?

    public void OnNavigatedTo(NavigationParameters parameters)
    {
      if(parameters.GetValue<NavigationMode>(KnownNavigationParameters.NavigationMode) == NavigationMode.Back)
        {            
        }

    //or logic like 
    if ( parameters.ContainsKey("myId") )
        {
        }
   }

我为什么要使用 parameters.ContainsKey("myId") 或 navigationMode 检查。

我只是想了解应该如何使用 OnNavigatedTo/OnNavigatingTo。 如果有人能用几句话表达一个场景,我就会明白如何使用这些方法。

在此先感谢

【问题讨论】:

  • 您是否查看过 Brian Lagunas 的任何视频,它们提供了有关该主题的一些重要信息。例如,[链接]youtube.com/watch?v=DYRLcqG2BAY
  • 谢谢,我确实看过那个视频,但很笼统,没有详细介绍,我想展示和解释太多东西的时间很短

标签: xamarin prism-6


【解决方案1】:

由于 Prism 的附加功能(参数、深度导航等),调用并不完全可比,但简单来说;

 Xamarin                       Prism
Navigation.PopAsync = NavigationService.GoBackAsync

Navigation.PushAsync =  NavigationService.NavigateAsync(uri, useModalNavigation: false)

Navigation.PushModalAsync = NavigationService.NavigateAsync(uri, useModalNavigation: true)

Prism 中的深度导航功能也非常强大,因此您可以一次导航多个页面

NavigationService.NavigateAsync("Page1/Page2/Page3");

导航到第1页然后第2页然后第3页并保持正确的导航堆栈。

您还可以使用绝对 uri 替换整个导航堆栈

 NavigationService.NavigateAsync(new uri("www.myapp.com/LoginPage", UriKind.Absolute);

这对于您希望用户在访问任何其他页面之前先登录的登录/身份验证方案很有用。

OnNavigatingTo() 和 OnNavigatedTo() 方法相似,但它们触发的时间不同。如果您跟踪呼叫,您将看到

{Navigate to Page1}
Page1ViewModel.Constructor
Page1ViewModel.OnNavigatingTo 
Page1ViewModel.OnNavigatedTo 
{Navigate to Page 2}
Page2ViewModel.Constructor
Page2ViewModel.OnNavigatingTo 
Page1ViewModel.OnNavigatedFrom 
Page2ViewModel.OnNavigatedTo 

所以第二页的 OnNavigatingTo 在第一页的 OnNavigatedFrom 之前被调用,然后第二页的 OnNavigatedTo 被调用。

这允许您根据您的要求将代码放置在导航流中的正确位置。如果您只是从一个页面移动到另一个页面,那么 OnNavigatedTo 可能就是您想要的。

希望对您有所帮助。

【讨论】:

  • 我要补充一点,为了更好地理解导航,您可以查看samples,或尝试QuickStart Templates,它为您提供了一个完整的工作应用程序,甚至使用弹出窗口插件。
  • @Tintow 非常感谢您的时间和解释,我将再次查看示例。
  • @DanS。我从您的堆栈流回复和您在 github 上的示例中学到了很多东西。我没有得到的一件事是 Prism.Logger 的目的是什么。它实际上输出了什么吗?我注意到您在示例中使用了它,并试图了解它作为 prism 用户是否具有任何价值。
  • 我们实际上已经从 Prism 中移除了 DebugLogger,因为我们将 Prism 作为发布版本发布,它不起作用。日志输出有很多价值,我将在不久的将来写一篇关于日志的帖子。您可以在此处查看如何在您的应用中轻松启用它:gist.github.com/dansiegel/13e2326c347c51f6a1d45d7b51649e22
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2022-11-09
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多