Prism xamarin 疑惑。你能澄清一下吗?

Prism xamarin Doubts .Can you clarify?

我正在尝试了解 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 参数)

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

当您要加载表单时,您在 there.Are 他们使用的逻辑中放置了什么样的逻辑?通常您在其中放置了什么样的验证以及为什么?

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

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

为什么要使用 parameters.ContainsKey("myId") 或导航模式检查。

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

非常感谢

由于 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);

这对于 Login/authentication 您希望用户在访问任何其他页面之前先登录的场景很有用。

OnNavigatingTo() 和 OnNavigatedTo() 方法相似,但触发时间不同。如果您跟踪调用,您将看到

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

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

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

希望对您有所帮助。