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

news2024/11/26 22:41:05

前言

默认情况下,使用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区域进行区域导航。

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

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

相关文章

第一百九十回 自定义一个可选择的星期组件

文章目录 1. 概念介绍2. 实现方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何让Text组件中的文字自动换行"相关的内容,本章回中将介绍 如何自定义一个可选择的星期组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

【已解决】页内切换<router-view>使得url变化导致菜单高亮消失

在写项目时&#xff0c;我们常会用到侧边菜单栏&#xff0c;而具体页面中经常使用<router-view>切换子组件。 但是按照我们平时的写法&#xff0c;切换子组件后会导致url改变&#xff0c;从而使得菜单高亮消失&#xff0c;这是非常影响用户体验的。 所以&#xff0c;我…

supervisor管理python进程

前言 平时开发调试中使用conda环境&#xff0c;项目比较多环境多&#xff0c;而且命令繁杂&#xff0c;每一次启动项目都可能会因为忘记启动方式而频繁报错。现在可以通过supervisor来管理&#xff0c;只需要配置几个文件&#xff0c;就可以轻松通过简单一致的命令启动工程&…

Linux - 进程间通信

进程通信 初步理解进程通信 所谓进程之间的通信&#xff0c;就是两个进程之间的 数据层面的交互。 我们之前说过&#xff0c;父子进程之间是有一些数据通信的&#xff0c;子进程可以看到一些父进程 允许 子进程访问的数据&#xff0c;比如 父进程的 环境变量&#xff0c;子…

【100天精通Python】Day75:Python机器学习-第一个机器学习小项目_鸾尾花分类项目(上)

目录 1 机器学习中的Helloworld _鸾尾花分类项目 2 导入项目所需类库和鸾尾花数据集 2.1 导入类库 2.2 scikit-learn 库介绍 &#xff08;1&#xff09;主要特点&#xff1a; &#xff08;2&#xff09;常见的子模块&#xff1a; 3 导入鸾尾花数据集 3.1 概述数据 3.…

【原创】提升MybatisPlus分页便捷性,制作一个属于自己的分页插件,让代码更加优雅

前言 MybatisPlus的分页插件有一点非常不好&#xff0c;就是要传入一个IPage&#xff0c;别看这个IPage没什么大不了的&#xff0c;最多多写一两行代码&#xff0c;可这带来一个问题&#xff0c;即使用xml的查询没法直接取对象里面变量的值了&#xff0c;得Param指定xml中的变…

CISP攻防界四大顶流,无门槛高收益,错过太可惜了

根据《2022年中国网络安全行业白皮书》中显示&#xff0c;2022年我国网安人才缺口达到了50万人左右&#xff0c;2023年只多不减。其中核心技术人才尤其稀缺。 随着国家对网络安全的重视&#xff0c;企业对于有网络安全专业背景和相关资质的人才需求越来越大&#xff0c;而攻防…

技术面试时,被问及职业规划,怎么回答才加分?

对于职场人士来说&#xff0c;但凡涉及到面试&#xff0c;90%以上的概率你会被问到职业规划。而作为一个技术人士&#xff0c;本身的表达能力就比硬实力薄弱一些。很多人一上来的回答就是&#xff1a;先做技术岗&#xff0c;阅历深点了做管理。这样的回答&#xff0c;往往前脚刚…

Linux(15):SELinux 初探

什么是 SELinux SELinux 是【Security Enhanced Linux】的缩写&#xff0c;字面上的意义就是安全强化的 Linux。 SELinux 是由美国国家安全局(NSA)开发的&#xff0c;开发原因&#xff1a;因为很多企业界发现&#xff0c;通常系统出现问题的原因大部分都在于【内部员工的资源…

关于队列的简单理解

1.队列(Queue) 1.1 关于队列 队列 &#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c; 队列具有先进先出 FIFO(First In First Out)的操作特性&#xff08;队列是个接口&#xff09;&#xff1b; 入队列&#x…

解密IIS服务器API跨域问题的终极解决方案

在当今数字化时代&#xff0c;API已成为现代应用程序的核心组件。然而&#xff0c;当你使用IIS&#xff08;Internet Information Services&#xff09;服务器提供API时&#xff0c;你可能会遇到一个常见的挑战&#xff1a;API跨域问题。这个问题经常困扰着开发人员&#xff0c…

理解依赖注入

1 回顾Spring IoC容器 1.1 Spring IoC容器 Web应用程序由大量的程序组件组成&#xff0c;这些组件一起工作完成业务逻辑的执行。 这些组件通常是一个依赖另一个&#xff0c;互相协作实现所需功能。 Spring提供容器&#xff0c;也就是IoC容器&#xff0c;来管理这些组件&…

【隐私计算】安全三方计算(3PC)的加法和乘法计算协议

ABY3中采用replicated secret sharing&#xff08;复制秘密分享&#xff09;机制&#xff0c;即2-out-of-3秘密分享&#xff0c;三个参与方的每一方都拥有share中的两份。下面来看一下这样做有什么好处。 2-out-of-3秘密分享 有 x , y x, y x,y两个操作数&#xff0c;先进行秘…

rcssci包横空出世,限制性立方样条全自动切点靓图

z致敬前辈:R语言统计与绘图 仅以本篇2800字真文一并纪念工作11年来潦倒的收入、间歇的鸡血、憋屈的倔强、幽暗的过往和心中的远方。 1 缘起 Restricted cubic splines (RCS)近年来火遍各类SCI期刊&#xff0c;初次接触的小伙伴们可以去搜索笔者前期的2篇RCS文章补充一下基础知…

Android wifi disable分析

总体流程 老套路基本不变&#xff1a; WifiSettings 通过 WifiManager 下cmd 给 WifiServiceWifiService 收到cmd后&#xff0c;先完成一部分列行检查&#xff08;如UID的权限、是否airPlayMode等等&#xff09;&#xff0c;之后将cmd下发给到WifiControllerWifiController 收…

ORACLE数据库实验总集 实验三 Oracle数据库物理存储结构管理

一、实验目的 &#xff08;1&#xff09;掌握 Oracle数据库数据文件的管理 &#xff08;2&#xff09;掌握 Oracle数据库控制文件的管理 &#xff08;3&#xff09;掌握 Oracle数据库重做日志文件的管理 &#xff08;4&#xff09;掌握 Oracle数据库归档管理&#xff0c; 二、…

周周爱学习之Redis重点总结

redis重点总结 在正常的业务流程中&#xff0c;用户发送请求&#xff0c;然后到缓存中查询数据。如果缓存中不存在数据的话&#xff0c;就会去数据库查询数据。数据库中有的话&#xff0c;就会更新缓存然后返回数据&#xff0c;数据库中也没有的话就会给用户返回一个空。 1.缓…

springboot整合阿里云oss上传图片,解决无法预览的问题

1.前置工作 需要申请一个域名,需要备案&#xff0c;对接这个踩了不少坑,写的很详细,guan fang tong guo bu 了,各位参考别的博客结合看吧,主要是域名配置,还有看service里面的实现 2.进入控制台 bucket列表 选择bucket 选择域名管理 复制你申请的域名,比如域名:abkhkajs…

苹果iOS免签应用打包,书签类顶部域名如何隐藏?

在iOS开发中&#xff0c;由于App Store的严格审核流程和各种政策限制&#xff0c;免签打包成为一些企业和开发人员选择的方案&#xff0c;以便更灵活地分发iOS应用。在这个过程中&#xff0c;许多开发者希望隐藏或最小化安装过程中顶部域名的显示&#xff0c;以提供更加原生的用…

家用洗地机哪个品牌最好最实用?热门洗地机测评

随着社会的不断进步&#xff0c;我们逐渐意识到日常生活中的许多任务需要消耗大量的时间和体力。一个典型的例子是卫生清洁工作&#xff0c;尤其是在大面积地区&#xff0c;如大型建筑物、商场或工厂。这些任务不仅繁琐&#xff0c;还可能影响生活质量和工作效率。为了应对这一…