Avalonia框架下面使用Prism框架实现MVVM模式

2023-12-06 08:20

本文主要是介绍Avalonia框架下面使用Prism框架实现MVVM模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

默认情况下,使用Avalonia模板创建的Avalonia项目自带了Mvvm框架,其实用着也蛮好用的,但是前期在WPF开发中习惯了使用Prism框架,所以今天我们就来研究一下如何在Avalonia项目里面引入Prism框架来提高开发效率。

创建Avalonia项目

如果你还不知道怎么创建Avalonia项目,请参考我上一篇文章Avalonia开发之HelloWrold
创建好的项目结构
在这里插入图片描述

使用Nuget安装Prism框架

打开Nuget包管理器,在里面搜索:prism.dry ,在列表里面找到:Prism.DryIoc.Avalonia
在这里插入图片描述
选择最新版本进行安装即可。安装成功以后如下:
在这里插入图片描述

修改App.axaml文件,支持Prsim架构

App.axaml文件更改

在这里插入图片描述

App.axaml.cs文件更改

在这里插入图片描述
这一块有几个需要特别注意的点:

    public override void Initialize(){AvaloniaXamlLoader.Load(this);base.Initialize();}

Initialize方法里面必须要加上一句:base.Initialize(); 否则渲染不出来主窗口程序。
还有就是OnFrameworkInitializationCompleted()因为我们用了prism框架,不用再这样MainWindow绑定ViewModel.

    public override void OnFrameworkInitializationCompleted(){//if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)//{//    desktop.MainWindow = new MainWindow//    {//        DataContext = new MainViewModel()//    };//}//else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)//{//    singleViewPlatform.MainView = new MainView//    {//        DataContext = new MainViewModel()//    };//}base.OnFrameworkInitializationCompleted();}

完成上面的调整,我们运行程序看下效果,如下图:
在这里插入图片描述
眼尖的小伙伴应该发现了问题,这它吖的没有把内容渲染出来吖!我们看下上节课的截图:
在这里插入图片描述

Prism框架其它适配调整

  1. 继承基类调整
    要解决这个问题也不难,其实就是因为Avalonia我们用的还是Avalonia的默认MVVM框架,它的底层VM是继承自:ReactiveObject,而Prism的MVVM框架VM是继承:BindableBase,不信我们可以看代码:
    在这里插入图片描述
    我们把这里改成BindableBase,改好后的代码如下:
    在这里插入图片描述

  2. 设置页面视图模型应自动连接到视图
    设置ViewModelLocator.AutoWireViewModel=true,如下图:
    在这里插入图片描述
    运行一些查看效果:
    在这里插入图片描述
    大功告成,下一篇我将带领大家看一下Avalonia如何使用Prism区域进行区域导航。

这篇关于Avalonia框架下面使用Prism框架实现MVVM模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461120

相关文章

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter