【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示...

前言:Maui终于在2022年8月9日推送出来了。今儿就迫不及待来把玩一下先。

A、我本地已有VS2022,不过版本比较老,此处选择更新。工具 -> 获取功能和更新里面,可以获取到新版本更新。

6e92b04e55c16cc5316eaf258b2477c3.png

B、最新版本是17.3.0,我本地只有17.1.1,选择 更新。

94e59b978f51ed36f203eacf9991dca5.png

C、让网络飞一会儿。

b287b8032dcda3b946069060a83539b0.png

1、更新完毕,打开VS,创建一个新的Maui项目(.NET MAUI应用)

6407fe8303aeba9bde9da3fe3c1eba5d.png

2、创建成功以后,右边可以看到如图所示的起始项目。Platforms里面,是该项目支持的平台环境类型,包括安卓、苹果、windows桌面等。

e2bc6afd662d79ee8e8d47605c84e0f5.png

3、直接运行,走一个。默认情况下,启动为Windows桌面客户端APP的形式。

66597fcb33e8a01c1ebf6058a9e3a9c7.png

4、项目的一些层级关系,如图所示。App构造函数里面,指定了主页为AppShell;AppShell里面又重定向到MainPage,MainPage设计器与业务交互代码里面,有一个点击事件。

14d3dcb96fc3cb85925c8c317495f4ce.png

5、VS工具栏有一排工具,可以用来配置模拟运行环境的。

1c3d6e60d016a51c62d0985612a354e2.png

6、比如说,此处我配置了一个默认的模拟器。

96641f3bd548c1afa78a2a3a29815095.png

7、配置好以后,运行里面就可以选择该模拟器了。

06d37e564a92ad6fa106e8fd0d8701f8.png

8、右键,默认情况下,可能都勾选了安卓和iOS,没有iOS模拟设备,就去掉该选项。

fd2f5e3b0a8dca70da9ac24f2a5d475d.png

9、然后直接运行,会看到提示,显示正在部署到 xxx模拟器上。前提可能需要电脑开启虚拟化,没开启的,可以参考我的另一篇文章进行开启虚拟化:https://www.cnblogs.com/weskynet/p/14825081.html

502c1414356e4011dcb8b0b92eae5a8c.png

10、运行以后的效果,如图所示。显示内容与桌面端是一样的,相当于一套同样的代码,多端可以同时跑。

【注意事项】Maui项目路径必须不能含有中文,否则可能会提示找不到文件 ,或者 APT 2000 错误之类的等等。

d34dcab918ae18db5a9d9a583906b057.png

11、测试一下点击按钮,搞个断点,走一波,嘿,还真的进来了。

842451f8bd2ec16b2e1f096b74d7824f.png

12、新建一个Maui页面,此处就叫Wesky,在里面写点小内容。同时把App构造函数里面的主页改成我自己的新建页,然后走一波。

b3d62012237171e9f36d6fc4d7ef600e.png

13、然后此处新建一个button按钮,搞一个弹窗测试下效果。

83b7db1719a533a6a769ff72ad2d5b7b.png

14、然后,测试一下依赖注入的效果。新建一个Test类以及接口ITest,里面写一个GetString方法,用来返回一个字符串。然后在Program里面,进行依赖注入注册,然后在App构造函数里面进行注入,可以看到进入构造函数里面了,并且可以获取到实例,说明依赖注入是生效的。

312ce150a51f5248a2958d6226e102e1.png

15、Maui和WPF可谓几乎是同卵双胞胎,所以肯定也可以支持MVVM模式啦~~ 新建一个WeskyViewModel,同时也在里面进行构造函数注入ITest接口,然后开发一个点击事件的绑定方法ClickCommand,用来测试MVVM的事件的双向绑定。点击以后,进行弹窗,弹出Test里面的获取字符串的提示信息,同时做一波Maui自带的依赖注入+MVVM模式的同时验证的效果。

98a1326aee2ee375e45718973da1be23.png

16、Wesky.cs文件里面(设计器代码文件),构造函数添加WeskyViewModel的注入,然后对BindingContext赋值为注入的参数实例,用来提供对MVVM的双向绑定的关联。

7ec4a63af714e0f0cc0c74540e390ca4.png

17、Wesky.Xaml设计器文件里面,原来的Click事件干掉,改成Command进行绑定刚才定义的ClickCommand方法,用来测试MVVM双向绑定的效果。

376145a5def1ba36c9c8da4f497f9aaf.png

18、App的构造函数里面,对Wesky页面进行注入,然后把实例赋值给MainPage,用于依赖注入的实例传递。

afca1efc69940adccd092ba28f542c50.png

19、最后,在Program里面,添加Wesky页面和ViewModel的注册。注册的生命周期,可以根据自己的实际情况进行选择,包括Singleton、Scoped、Transient,跟传统的.NET 6的注册方式一致。

e8f1ea12a70a7fe956de956514023db5.png

20、然后,运行一下,程序在模拟器里面运行,然后点击按钮以后,效果如图所示。说明依赖注入+MVVM同时验证都通过了。

cc43230795704555ff8f266a48c99aee.png

21、模拟器运行以后,在根目录下,会有对应生成的apk文件,可以拿来安装使用。一个是没有签名版本,一个是签名版本。

015e72ca233f23a4c2e30d445ac31367.png

22、拷到我的老古董华为鸿蒙系统的手机上,试着安装一下。

691fc5386f206c150466d085f42d03bc.jpeg

23、尴尬了,没成功。没成功的可能性,大概率可能是跟华为的麒麟芯片是基于arm架构的,而模拟器是非arm架构的。

036db1ee70c5ec491e1cf8150ab947f7.jpeg

24、选择一个arm架构的模拟器,再创建一个,走一波

1114ff38cea905d84f20f1a65e61d246.png

25、由于本机系统环境原因,没能启动arm架构的模拟器,所以暂告失败~~

f2dc113d8cab486ddb16033a730c14c4.png

26、最后,不用模拟器运行,直接当作Windows桌面程序走一波,效果如图所示。

8dfbd7b7182f552802fabeb38e2fb1ee.png

27、以上就是该文章的全部内容,大佬们如果觉得有帮助,欢迎转发和载看。

如果感兴趣一起交流.NET技术有关内容,也欢迎扫以下二维码,加入我的微信群,一起吹牛、谈人生、聊技术,8月17日之前均有效:

89650e1e4ae3cc58082b855d73281f28.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSQL存储

2019独角兽企业重金招聘Python工程师标准>>> WebSQL这种存储技术,相对于学过数据库的人来说,还是比较容易理解和上手的,主要就是它的存储风格和我们一般所学的SQL Server 和Oracle比较像,对于HTML5来说,当然…

抖音服务器带宽有多大,才能供上亿人同时刷?

最近看到一个有意思的提问:抖音服务器带宽有多大,为什么能够供那么多人同时刷?今天来给小伙伴们科普一下。 抖音,百度,阿里云,腾讯都是自建的数据中心,都是 T 级别出口带宽(总出口带…

ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目,重点关注Host.CreateDefaultBuilder(args)中的执行过程,主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限,先整体理解、建立框架&#xf…

404和302

为什么80%的码农都做不了架构师?>>> 404 php中用header()函数是可以为返回页面添加404的头信息的,从而提示浏览器该网页找不到了。 所以可以使用:header("HTTP/1.0 404 Not Found");或者:header("Stat…

oracle sqlplus使用

2019独角兽企业重金招聘Python工程师标准>>> 1、常用连接方式 sqlplus / as sysdba 无需数据库进入可用状态,就可用用该命令登录,运行startup来启动。 sqlplus username/pwdhost/service_name,如: sqlplus tiger/scott…

20款IDEA 神级插件 效率提升 30 倍,写代码必备

插件目录 1. Alibaba Java Coding Guidelines 2.GsonFormat 3.A8Translation 4.Maven Helper 5.Free Mybatis plugin 6.Grep Console 7.Lombok 8.Nyan progress bar 9.FindBugs-IDEA 10.Key Promoter X 11.JavaDoc 12.ignore 13.RainbowBrackets 14.Activate-power-mode 15.C…

【温故知新】C# Linq中 Where使用技巧

微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧,如需源码 后台回复 源码 即可;如果觉得对你有帮助,欢迎关注C# Linq中 Where使用技巧hello 大家好,很开心又能重新分享C#编程开发技巧了,之前因为工作和生活…

分布式id解决方案

文章目录 1.分布式id实现方案 1.1.uuid1.2 数据库主键自增1.3 Redis自增1.4 号段模式1.5 雪花算法(snowflake) 1.5.1 百度(uid-generator)1.5.2 美团(Leaf)所谓id就是能够用作唯一标识的记号。 在我们日常的…

我和大象的十年往事 - 感恩、感谢、加油、腾飞

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的"OSCAR云计算开源产业大会"于2018年3月21日-22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居&#xf…

4种分布式session解决方案

cookie和session的区别和联系 cookie是本地客户端用来存储少量数据信息的,保存在客户端,用户能够很容易的获取,安全性不高,存储的数据量小 session是服务器用来存储部分数据信息,保存在服务器,用户不容易获…

Blazor University (43)JavaScript 互操作 —— 类型安全

原文链接:https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/type-safety/类型安全在从 JavaScript 调用 .NET[1] 部分中,您可能已经注意到我们的 JavaScript 的第 6 行在将随机生成的数字传递给 .NET 之前调用了 toStr…

分享 60 个神级 VS Code 插件

文章来源:juejin.cn/post/6994327298740600839 本文不做任何编辑器的比较,只是我本人日常使用 vscode 进行开发,并且比较喜欢折腾 vscode ,会到处找这一些好玩的插件,于是越攒越多,今天给大家推荐一下我收…

PHP 基础篇 - PHP 中 DES 加解密详解

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。密钥长度是64位(bit),超过位数密钥被忽略。所谓对…

PerfView专题 (第一篇): 如何寻找热点函数

一:背景 准备开个系列来聊一下 PerfView 这款工具,熟悉我的朋友都知道我喜欢用 WinDbg,这东西虽然很牛,但也不是万能的,也有一些场景他解决不了或者很难解决,这时候借助一些其他的工具来辅助,是…

Centos7设置IP为固定值

1.进入到系统的IP地址保存文件所在目录 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts 2.修改保存IP信息的文件 [rootlocalhost ~]# vim ifcfg-eth0 (你机器上的名字有可能不是这个,但是是以ifcfg-eth开头的文件) 保存后退出 3.重启…

为 EditorConfig 文件开启错误编译失败

前言上次,我们介绍了 EditorConfig 文件可以自定义代码样式规则。但是,当我们想设置代码样式严重性,比如不允许编译成功时,又踩了不少坑。修改无效想把 var 首选项,从“首选"var" 仅重构”,改成“…

【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照

本文以图形化的方式,从‘执行机制’方面对照传统WebForm站点和MVC站点。请參看下面图形: 一、执行机制 当我们訪问一个站点的时候,浏览器和server都是做了哪些动作呢? (本文仅仅是提供一个简单的执行过程,有…

投阿里被拒,说跳槽太频繁!三年两个工作,问题真的那么大吗?

什么样的跳槽频率才不算频繁?一位网友发问:投阿里被拒,理由是跳槽太频繁,不合适。三年两个工作,问题真的那么大吗?网友说,阿里对稳定性要求非常高,三年两跳和五年三跳都是红线&#…

为什么信息化 ≠ 数字化?终于有人讲明白了

作者:石秀峰 来源:谈数据(ID:learning-bigdata) 近期,我一做数字化咨询的朋友(化名老王)遇到了一个头痛的问题:话说老王的团队近期接了一个大单——一大型制造业的数字化…

JAVA代码—算法基础:数独问题(Sodoku Puzzles)

JAVA代码—算法基础:数独问题(Sodoku Puzzles) 数独问题(Sodoku Puzzles) 数独游戏(日语:数独 すうどく)是一种源自18世纪末的瑞士的游戏,后在美国发展、并在日本得以发扬…