前言
默认情况下,使用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框架其它适配调整
-
继承基类调整
要解决这个问题也不难,其实就是因为Avalonia
我们用的还是Avalonia的默认MVVM框架,它的底层VM是继承自:ReactiveObject
,而Prism的MVVM框架VM是继承:BindableBase
,不信我们可以看代码:
我们把这里改成BindableBase
,改好后的代码如下:
-
设置页面视图模型应自动连接到视图
设置ViewModelLocator.AutoWireViewModel=true
,如下图:
运行一些查看效果:
大功告成,下一篇我将带领大家看一下Avalonia如何使用Prism区域进行区域导航。