0

我正在尝试了解 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 参数)与 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。如果有人能用几句话来表达一个场景,我就会明白如何使用这些方法。

提前谢谢了

4

1 回答 1

2

由于 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 可能就是您想要的。

希望有帮助。

于 2017-07-27T20:06:40.240 回答