Xamarin.Forms的简单导航服务

pexels-photo-297755

如果您曾经写过Xamarin表单应用程序并希望从视图模型中导航到另一个页面。然后,您已经过来了导航逻辑通常驻留在视图中。由于每个最佳实践博客文章,课程和视频告诉我们,观点和商业/控制逻辑应该是分开的。我们常常留下了如何集成基于视图模型的导航。

我们想要做什么

这篇文章的目标是向您展示我们如何从视图模型启动导航呼叫。不将依赖项添加到您的视图或写回呼叫方法。

在XAMARIN表单中,页面之间有两种导航方式:

  • 莫代尔

导航是在应用中导航的最直接的方式。主页 app.xaml.cs. 是A. NavigationPage. 其中包含向用户显示的主页页面:

导航到下一页时,页面将被推到导航堆栈上。然后,用户可以通过屏幕向后导航(iOS&Windows)或硬件按钮(Android &视窗)。导航背部将放置当前页面,从导航堆栈弹出页面并将其显示给用户。

使用时导航到页面时 莫代尔。目标页面显示在单独的导航上下文中。这导致用户不再使用来自OS的软件返回按钮显示用户的行为。背导航呼叫与推动不同。因此,它需要调用导航页面的不同方法。

模态导航是在视图上捕获用户的一个很好的选择。这通常不是我们打算与用户做的事情。但是,如果用户必须登录或者用户同意(你真的确定......)填写表格。然后模态导航允许将用户保持在页面上并通过自定义定义逻辑处理导航。

笔记: 模态导航是IOS概念在它的起源中。在Android和Windows下,用户有系统按钮以导航该应用程序。如果用户不应该留下页面并返回上一页i.e.用户必须先登录。开发人员将不得不覆盖 onback禁止 在视图背后的代码中返回true。

我们在Xamarin.Forms中有两个导航方法。这些是推动和模态。每个都有不同的方式调用导航。这也适用于后航。

使用导航服务

通常,导航服务必须包含导航页面来处理导航堆栈。此外,它需要提供一种通过推送或模态导航导航到页面的方法,并允许导航。

初始化 导航服务现在可以完成 app.xaml.cs. 通过使用相应的键注册所有视图。

在视图模型中,我们现在可以通过使用目标页面的键提供服务来导航到页面。如果需要,我们也可以通过参数。由于参数是类型对象,因此存在没有限制。

正如先前所说 莫代尔 导航离开当前导航堆栈并显示自己的页面。如果我们想通过键入子页面从模态根页面导航。模态根页面必须处于导航页面本身。这是导航服务自动确实的。它进一步删除了模态根页面的导航标题。

后退 导航检查当前页面的导航是什么。导航堆栈中的根页面是模态导航堆栈中应用程序的根页面或根页面。在任何一种情况下,它都会选择适当的后对导航方法。
如果页面不是根页面,我们将简单地导航回上一页被推到导航堆栈上。

结论

使用本博客文章中描述的导航服务。可以从视图模型导航到其他页面。这样做,我们不会将依赖关系添加到视图堆栈中。 Xamarin形式。我们也没有必要为每个导航动作又一次地编写笨重的回调方法。

我想要感谢 Laurent Bugnion. 在使用MVVM光时,以上面以上面的初始实施方式奠定了上面描述的导航服务的基础。

您可以找到运行的样本 GitHub..

Updated: