一款WPF的小巧MVVM框架——stylet框架初体验

    今天偶然知道有一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很神器。所以接下来我要做一个简单的demo,顺便来分享给大家。

    本地创建一个WPF项目,此处我使用.NET 8来创建。然后引用stylet最新的nuget包。

7c3447ad94addf11e8ba9a78d61e1abe.png

    然后删掉App.xaml里面自带的启动项

b5a008ff77bb07cd3ec0fa5b312a8210.png

删掉以后:

05b4c44cd625040332488c9116aa5936.png

    stylet使用View和ViewModel强制性一一对应的关系,比如说,页面A,必须要写成AView和AViewModel的形式,才能识别。所以默认的MainWindow咱们可以干掉,重新创建一个页面,例如 MainView:

98b20779f826fc8b893a547b300e4c8a.png

    再创建一个对应的ViewModel类。它的ViewModel类型,需要继承自Stylet.Screen

37ee30e928c3e144b806531803236d1c.png

    然后需要创建一个启动项,默认类名称为 Bootstrapper,它继承自Bootstrapper,T指的是启动项对应的ViewModel。启动项Bootstrapper里面还要重写IOC容器进行服务注册等有关。

5e625188b0e3fde9bbd54525b3944bfb.png

在App.xaml.cs文件内,提供对启动项Bootstrapper的声明和使用。

014934f128fc470c935c9a5283200b5f.png

如果以上步骤都没做错的话,那么现在应该是可以正常启动了。

f6a690226e73e567a3207b2c87b23995.png

    接下来,MVVM的实现,先搞2个简单的控件,一个提供属性MVVM实现,一个提供点击Command命令实现。需要注意的是,stylet的Command命令或者其他自定义命令实现,不是直接Bingding了,而是使用Action来绑定。

11ad2bd1357eabfb714683c526e017b7.png

ViewModel里面,看下具体代码,和平常大家使用的MVVM双向绑定,有点差异大地方,我圈起来了。

1ac8ebcd1b4966eaf800712525909a90.png

启动程序,原始效果如下所示

abfcff4d61bed8778f033c8f2fe24fba.png

点击按钮以后,自动进入到指定的方法里面,把Message值改变,同时前端展示的值也跟着变了。

dea190aae5165add7621cda00b29cbf1.png

接下来说一下它的IOC容器来实现依赖注入。先创建一个测试用的服务类,里面就一个方法,获取消息,返回“Stylet 服务注入~ ”字符串。

810e913dc8b1fd2005edec81b71dda5f.png

启动项的ConfigureIoC方法里面,提供服务的注册。不过它自带的IOC容器可选生命周期比较有限,没有prism或者castle或者asp.netcore自带的容器丰富。不过注册的写法看起来很直观,builder.Bind<接口>().To<实现>().生命周期模式。

934aced14ef9581807a43f1eac6f9892.png

通过构造函数注入进来,然后在命令方法里面直接调用,并把返回值提供给Message用于展示。

00687ebc194e2ee754d8b24ee4f1df91.png

运行程序,并点击按钮,可以看到返回了GetMessage()里面返回的信息,说明服务注册和注入使用是成功的。

d8745b4df86893730c60507966a64546.png

如果有需要以上demo源码,可以在我个人公众号【Dotnet Dancer】后台回复 【stylet】即可获取。

公众号快捷入口:

3ea5d7ff838e0ff95c05c64d26a337a6.jpeg

如果以上内容对你有帮助,欢迎点赞、转发、再看或留言。谢谢大家阅读。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值