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

时间:2017-07-27 08:32:17

标签: xamarin prism-6

我试图了解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。 如果有人能用几句话说出一个场景,我会理解如何使用这些方法。

非常感谢提前

1 个答案:

答案 0 :(得分: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");

导航到Page1然后导航到Page2然后保持正确的导航堆栈。

您还可以使用绝对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 

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

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

希望有所帮助。