• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Xamarin.Forms+Prism(2)—— 基本使用 NavigationService,xamarin.forms

Xamarin.Forms+Prism(2)—— 基本使用 NavigationService,xamarin.forms

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了Xamarin.Forms+Prism(2)—— 基本使用 NavigationService,xamarin.forms等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Xamarin.Forms+Prism(2)—— 基本使用 NavigationService,xamarin.forms


本文主要对Prism框架下的导航服务NavigationService进行一次介绍和使用。

1、打开VS,可以看到左侧的已安装模版里面有:

2、创建完成后,从PCL项目中,看到App.xaml.cs中的代码知道,程序现在的逻辑是打开APP->NavigationPage->MainPage(传递title参数);

3、先在Views文件夹里面添加一个Prism ContentPage,可以看到LoginPageViewModel会自动在ViewModels添加。

 

 4、假如我们现在要修改逻辑打开APP的时候,要判断上次是否登录状态,来判断是否需要跳转到LoginPage:

  现在我们就要修改逻辑,在App.xaml的OnInitialized()里,添加代码;

        protected override void OnInitialized()
        {
            InitializeComponent();

            bool isLogin = false;//这里只是一个假设值,真实项目中,应该判断是否已登录。
            if (isLogin)
            {
                //已经登录
                NavigationService.NavigateAsync("NavigationPage/MainPage?title=Hello%20from%20Xamarin.Forms");
            }
            else
            {
                NavigationService.NavigateAsync("LoginPage");
            }

        }

  在LoginPage的Xaml中添加一个登录按钮,可以看出是MVVM的设计模式:

    <Button Text="登录" Command="{Binding LoginCommand}"></Button>

 

 

  修改LoginPageViewModel的代码,新建一个构造函数,参数就是INavigationService,这是Prism自带的导航服务,会自动传递过来的;

    public class LoginPageViewModel : BindableBase
    {
        public LoginPageViewModel()
        {

        }

        private INavigationService _navigationService;

        /// <summary>
        /// 登录操作绑定的命令
        /// </summary>
        private DelegateCommand<EventArgs> _loginCommand;
        public DelegateCommand<EventArgs> LoginCommand
        {
            get
            {
                if (_loginCommand == null)
                {
                    _loginCommand = new DelegateCommand<EventArgs>(async r =>
                      {
                          //这里做登录操作,如访问你的WebApi
                          await Task.Delay(2000);


                          //这里假如已经做完登录操作,保存用户信息,并跳转到MainPage;
                          await _navigationService.NavigateAsync("NavigationPage/MainPage");
                      });
                }
                return _loginCommand;

            }
        }

        public LoginPageViewModel(INavigationService navigationService)
        {
            _navigationService = navigationService;
        }
    }

  假如我们现在这样做,用户登录成功点击登录成功,跳转到NavigationPage->MainPage后,用户点击后退,会跳回登录页面。这就需要我们手动设置NavigationService中的栈

把跳转代码修改为,这样我们假如用户点击后退,也不会回到MainPage页面了。

    await _navigationService.NavigateAsync("app:///NavigationPage/MainPage");
    //await _navigationService.NavigateAsync("NavigationPage/MainPage");

 

  还有,如果ViewModel类实现INavigationAware接口,会实现3个方法,就是提供导航准备进入,导航已经进入,导出已经跳出三种基类方法。

        public void OnNavigatedFrom(NavigationParameters parameters)
        {

        }

        public void OnNavigatingTo(NavigationParameters parameters)
        {

        }

        public void OnNavigatedTo(NavigationParameters parameters)
        {
            if (parameters.ContainsKey("title"))
                Title = (string)parameters["title"] + " and Prism";
        }

  

  最后:

  1、要注意程序所有要使用的Page,都需要在App.xaml代码中注册,因为Prism的服务是基于Page的,所以注册的对象基类必须是Page

  

  2、使用NavigationService进行导航时,填写的字符串Page名字,必须大小写匹配,如写成mainpage,会报错。

 

   3、程序运行截图:程序运行,直接跳转到LoginPage,点击登录按钮,程序等待2秒后会跳转到MainPage,我们现在可以测试点击后退,会发现直接退出程序,逻辑修改成功。

 

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Xamarin.Forms+Prism(2)—— 基本使用 NavigationService,xamarin.forms

相关文章

  • 2017-05-26硅谷社交8--联系人列表页面,硅谷社交8--联系人
  • 2017-05-26Andorid Scrolling Activity(CoordinatorLayout详情),scrollingactivity
  • 2017-05-26一个难倒 3年 android开发经验 &quot; 工程师 &quot; 的 &quot;bug&quot;
  • 2017-05-26散列表的数学分析(精解)--通过链表法解决碰撞,数学分析精解
  • 2017-05-26android的color整理(一),androidcolor整理
  • 2017-05-26Android N分屏模式Activity生命周期的变化,androidactivity
  • 2017-05-26Android开发学习—— Broadcast广播接收者,androidbroadcast
  • 2017-05-227.6.2 基于TCP协议的Socket通信(1)
  • 2017-05-26自定义一个全屏的AlertDialog。,全屏alertdialog
  • 2017-05-222.4.6 BaseAdapter优化

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android APK免安装启动
    • Android ListView onItemClick Not Work,androidonitemclick
    • 手游助手应用源码项目,游助手源码项目
    • android组合控件Titlebar的定制过程
    • 再谈Android AsyncTask的优缺点,androidasynctask
    • Yarn上运行spark-1.6.0
    • [android] 手机卫士保存密码时进行md5加密,androidmd5
    • Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
    • 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新,androidtinker
    • 移动应用支付系列一:支付宝支付,移动应用支付系列

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有