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区域进行区域导航。