一款WPF的精简版MVVM框架——stylet框架的初体验(包括MVVM绑定、依赖注入等操作)

news/2025/3/19 21:55:00/文章来源:https://www.cnblogs.com/weskynet/p/18231667
今天偶然知道一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很巴适,现在我做一个简单的demo来顺便来分享给大家。
本地创建一个WPF项目,此处我使用.NET 8来创建。然后引用stylet最新的nuget包。
0
 
然后删掉App.xaml里面自带的启动项
0
删掉以后:
0
 
stylet使用View和ViewModel强制性一一对应的关系,比如说,页面A,必须要写成AView和AViewModel的形式,才能识别。所以默认的MainWindow咱们可以干掉,重新创建一个页面,例如 MainView:
 
0
再创建一个对应的ViewModel类。它的ViewModel类型,需要继承自Stylet.Screen
0
然后需要创建一个启动项,默认类名称为 Bootstrapper,它继承自Bootstrapper,T指的是启动项对应的ViewModel。启动项Bootstrapper里面还要重写IOC容器进行服务注册等有关。
0
在App.xaml.cs文件内,提供对启动项Bootstrapper的声明和使用。
0
如果以上步骤都没做错的话,那么现在应该是可以正常启动了。
0
 
接下来,MVVM的实现,先搞2个简单的控件,一个提供属性MVVM实现,一个提供点击Command命令实现。需要注意的是,stylet的Command命令或者其他自定义命令实现,不是直接Bingding了,而是使用Action来绑定。
0
ViewModel里面,看下具体代码,和平常大家使用的MVVM双向绑定,有点差异大地方,我圈起来了。
0
启动程序,原始效果如下所示
0
点击按钮以后,自动进入到指定的方法里面,把Message值改变,同时前端展示的值也跟着变了。
0
接下来说一下它的IOC容器来实现依赖注入。先创建一个测试用的服务类,里面就一个方法,获取消息,返回“Stylet 服务注入~ ”字符串。
0
启动项的ConfigureIoC方法里面,提供服务的注册。不过它自带的IOC容器可选生命周期比较有限,没有prism或者castle或者asp.netcore自带的容器丰富。不过注册的写法看起来很直观,builder.Bind<接口>().To<实现>().生命周期模式。
0
通过构造函数注入进来,然后在命令方法里面直接调用,并把返回值提供给Message用于展示。
0
运行程序,并点击按钮,可以看到返回了GetMessage()里面返回的信息,说明服务注册和注入使用是成功的。
0
如果有需要以上demo源码,可以在我个人公众号【Dotnet Dancer】后台回复 【stylet】即可获取。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

按键中断驱动程序-poll机制

前言:学东西的时候总是喜欢碎碎念,去思考该怎么学。关于嵌入式开发,以前就觉得嵌入式只是一个工具,关键还是结合专业知识赋能,比如控制、信号处理、神经网络、计算机网络、各种协议比如蓝牙、wifi,音视频,当然,如果能够把内核学的很透彻,那也是很了不起的。现在越学越…

UDP协议的应用——域名解析

设计程序实现解析www.baidu.com 的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确设计程序实现解析www.baidu.com 的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确 /******************************************************************************…

基于腾讯元器搭建前端小助手

通过本文,我们了解了如何利用腾讯元器搭建一个前端助手智能体。通过使用插件和观察其使用效果,我们可以发现前端助手在解决问题和提供帮助方面的潜力。这个前端助手可以成为我们在前端开发过程中的得力助手,帮助我们提高工作效率和解决难题。随着智能技术的不断进步,我们可…

根据域名获取IP

/**************************************************************************************************************************************** file name:multicast.c* author :momolyl@126.com* date :2024/06/04* brief :设计程序实现解析www.baidu.co…

npm下载依赖报错:operation not permitted

npm下载依赖报错:operation not permitted 想下个SoybeanAdmin来用下,需要用到pnpm,但是用npm下载的时候直接报错简单来说就是权限的问题,网上很多都说改nodejs下面的几个文件夹的权限,我的评价是不好使,还得修改nodejs这个文件夹的权限才行,右键属性-安全-编辑-勾上完全…

containerd 源码分析:创建 container(三)

文接 containerd 源码分析:创建 container(二) 1.2.2.2 启动 task 上节介绍了创建 task,task 创建之后将返回 response 给 ctr。接着,ctr 调用 task.Start 启动容器。 // containerd/client/task.go func (t *task) Start(ctx context.Context) error {r, err := t.client…

linux下用域名解析ip地址列表

linux下用域名解析ip地址列表 目录linux下用域名解析ip地址列表头文件/宏定义主函数验证结果 头文件/宏定义 #include <stdio.h> #include <stdlib.h> #include <netdb.h> #include <arpa/inet.h>主函数 /*******************************************…

模拟集成电路设计系列博客——6.3.3 动态匹配电流源

6.3.3 动态匹配电流源 在电流开关上使用动态技术是为了实现用于音频D/A转换器的高度良好匹配的电流源(大到16bit精度)[Schouwenaars,1988]。 这个方式被用于设计一个16-bit的音频D/A转换器,其中6位MSB通过温度计码实现。由于进度要求被限制在剩余位上,一个二进制阵列在他们…

Redis 结合 Docker 搭建集群,并整合SpringBoot

软件版本 Redis 7.2.5 Docker 26.1.3准备工作 由于docker直接拉取运行了,所以需要提前准备配置文件 Index of /releases/ (redis.io) 下载后,把redis-7.2.5.tar.gz\redis-7.2.5.tar\redis-7.2.5\里的 redis.conf sentinel.conf 复制出来概览结构如上图所示,准备6个服务器。配…

Redis 结合 Docker 搭建哨兵+主从高可用方案,并整合SpringBoot

软件版本 Redis 7.2.5 Docker 26.1.3准备工作 由于docker直接拉取运行了,所以需要提前准备配置文件 Index of /releases/ (redis.io) 下载后,把redis-7.2.5.tar.gz\redis-7.2.5.tar\redis-7.2.5\里的 redis.conf sentinel.conf 复制出来概览结构如上图所示,准备6个服务器。配…

体二极管

从(3)中可以看到,从D极的N型区->中间P型区->Sub极->S极,刚好构成了一个二极管结构,并且处于反偏状态,这就是MOS符号中并联了一个二极管的原因。 有的电池保护板,在锂电池过放后,会开启保护功能:关闭放电MOS。当插上充电器后,就利用MOS体二极管,使得电路导通,…