【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.pswp.cn/news/283806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283806.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學go語言能做什么工作?

Go語言主要用作服務器端開發,其定位是用來開發“大型軟件”的,適合于很多程序員一起開發大型軟件,并且開發周期長,支持云計算的網絡服務。Go語言能夠讓程序員快速開發,并且在軟件不斷的增長過程中,它能讓程…

WebSQL存儲

2019獨角獸企業重金招聘Python工程師標準>>> WebSQL這種存儲技術,相對于學過數據庫的人來說,還是比較容易理解和上手的,主要就是它的存儲風格和我們一般所學的SQL Server 和Oracle比較像,對于HTML5來說,當然…

軟件工程第一次作業補充

1.關注《構建之法》的作者鄒欣老師的博客;2.花二十分鐘寫一個能自動生成小學四則運算題目的“軟件”,要求除了整數以外,還要支持真分數的四則運算。將代碼上傳至coding.net,并將地址發布至自己的博客。代碼地址: https://coding.n…

抖音服務器帶寬有多大,才能供上億人同時刷?

最近看到一個有意思的提問:抖音服務器帶寬有多大,為什么能夠供那么多人同時刷?今天來給小伙伴們科普一下。 抖音,百度,阿里云,騰訊都是自建的數據中心,都是 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#編程開發技巧了,之前因為工作和生活…

JS引用類型 -- Array類型

ECMAScript數組與其他語言中的數組都是數據的有序列表,但與其他語言不同的是,ECMAScript數組的每一項可以保存任何類型的數據。而且ECMAScript數組的大小是可以動態調整的,即可以隨著數據的添加自動增長。 創建數組的基本方式有兩種&#xff…

分布式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…

Httpclient發送json請求

一、Httpclient發送json請求 public String RequestJsonPost(String url){ String strresponse null; try{ HttpClient hc new DefaultHttpClient(); HttpPost hp new HttpPost(url); JSONObject jsonParam new JSONObject(); jsonParam.pu…

基于ABP的AppUser對象擴展

在ABP中AppUser表的數據字段是有限的,現在有個場景是和小程序對接,需要在AppUser表中添加一個OpenId字段。今天有個小伙伴在群中遇到的問題是基于ABP的AppUser對象擴展后,用戶查詢是沒有問題的,但是增加和更新就會報"XXX fie…

html (align 、placeholder )

onblur 事件會在對象失去焦點時發生。 onkeyup 事件會在鍵盤按鍵被松開時發生。 ----------------------------------------------------------------------------------------------------------- align 屬性規定單元格中內容的水平對齊方式。 <td align"value"&…

4種分布式session解決方案

cookie和session的區別和聯系 cookie是本地客戶端用來存儲少量數據信息的&#xff0c;保存在客戶端&#xff0c;用戶能夠很容易的獲取&#xff0c;安全性不高&#xff0c;存儲的數據量小 session是服務器用來存儲部分數據信息&#xff0c;保存在服務器&#xff0c;用戶不容易獲…

L2-020. 功夫傳人

一門武功能否傳承久遠并被發揚光大&#xff0c;是要看緣分的。一般來說&#xff0c;師傅傳授給徒弟的武功總要打個折扣&#xff0c;于是越往后傳&#xff0c;弟子們的功夫就越弱…… 直到某一支的某一代突然出現一個天分特別高的弟子&#xff08;或者是吃到了靈丹、挖到了特別的…

找數組里沒出現的數

題目&#xff1a;給定整數的數組&#xff0c;其中1≤A [1]≤ N&#xff08;N數組的大小&#xff09;&#xff0c;一些元素出現兩次以及其他出現一次。找到不出現在這個數組中的[1&#xff0c;n ]包含的所有元素。 思路&#xff1a;map的思想。。。。 public List<Integer>…

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

原文鏈接&#xff1a;https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/type-safety/類型安全在從 JavaScript 調用 .NET[1] 部分中&#xff0c;您可能已經注意到我們的 JavaScript 的第 6 行在將隨機生成的數字傳遞給 .NET 之前調用了 toStr…

分享 60 個神級 VS Code 插件

文章來源&#xff1a;juejin.cn/post/6994327298740600839 本文不做任何編輯器的比較&#xff0c;只是我本人日常使用 vscode 進行開發&#xff0c;并且比較喜歡折騰 vscode &#xff0c;會到處找這一些好玩的插件&#xff0c;于是越攢越多&#xff0c;今天給大家推薦一下我收…