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

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

  1. 【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示

    前言:Maui终于在昨天(2022年8月9日)推送出来了.今儿就迫不及待来把玩一下先. A.我本地已有VS2022,不过版本比较老,此处选择更新.工具 -> 获取功能和更新里面,可以获取到新版本 ...

  2. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  3. 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory

    spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...

  4. 三大框架 之 Spring(IOC控制反转、DI依赖注入)

    目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...

  5. DRF框架之序列化器初体验

    首先,我们需要明白序列化和反序列化的过程指的是什么. 序列化操作:将模型数据 ---> 字典数据 --->JSON数据(响应JSON数据的操作) 反序列化操作:将JSON数据 ---> ...

  6. 说不尽的MVVM(2) – MVVM初体验

    知识预备 阅读本文,我假定你已经具备以下知识: C#.WPF基础知识 了解Lambda表达式和TPL 对事件驱动模型的了解 知道ICommand接口 发生了什么 某程序员接到一个需求,编写一个媒体渲染 ...

  7. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  8. 依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介 .

    3.2.    “好莱坞原则” 看了前面关于依赖注入概念的描述,我们来提炼出依赖注入的核心思想.如果说传统的组件间耦合方式,例如new.工厂模式等,是一种由开发者主动去构建依赖对象的话,那么依赖注入模 ...

  9. ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节

    由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...

  10. 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...

随机推荐

  1. CPU性能实战分析

    1.从平均负载谈起 我们每次发现线上系统变慢时,第一件事往往都会使用top或者uptime命令查看cpu的负载以及占用率,比如top命令会有下面的结果: top - 15:51:39 up 84 da ...

  2. Kubernetes 部署集群1.28.2版本(无坑)

    初步搭建一个一个主节点和两个从节点Kubernetes 1.28.2 集群.先准备好机器 | host | hostname | os | role | hardware | | --- | --- ...

  3. axios请求时获取不到错误提示问题。

    前端方面使用axios请求,由于新增时,有的条件格式填写错误.后端返回412状态码. ,axios可能封装不完善,他获取数据使状态码为4开头的统统不暴露出去,导致请求时,412这样的状态码,获取不到里 ...

  4. 力扣71(java)-简化路径(中等)

    题目: 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目 ...

  5. 微信、企微小程序使用taro对位置权限进行处理

    1.功能 当用户未授权地理位置权限时,引导用户开启地理位置权限,区别于之前的uni处理,uni的处理 的处理没有手机系统关闭位置权限的处理,但是uni文章中对于打开位置权限后重新返回小程序有做权限重获 ...

  6. 如何快速开发 Serverless Devs Package ?

    ​简介:目前,开发者开发 Serverless Package 的流程相对来说是比较简单的.因为在 Serverless Devs 开发者工具中,已经提供了相对完整的脚手架能力,一文了解详情~ ​ 作 ...

  7. 移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统

    简介: 2020年12月CentOS项目组宣布CentOS 8将于2021年12月31日结束支持,这意味着从2022年开始,使用CentOS 8的用户,将无法得到来自官方的新硬件支持.bug修复和安全 ...

  8. 如何玩转 WebGL 并行计算

    ​简介: 如今在 Web 端使用 WebGL 进行高性能计算已有不少实践,例如在端智能领域中的 tensorflow.js,再比如可视化领域中的 Stardust.js. ​ 作者 | 沧东 来源 | ...

  9. dotnet DirectX 通过 Vortice 控制台使用 ID2D1DeviceContext 绘制画面

    在上一篇博客里面告诉大家,如何使用 Vortice 从零开始控制台创建 Direct2D1 窗口.上一篇博客采用的是 CreateDxgiSurfaceRenderTarget 的方式拿到了 ID2D ...

  10. Fastbin attack&&Double free和Unsortbin leak的综合使用

    Fastbin attack&&Double free和Unsortbin leak的综合使用 今天做一个综合题目,包括利用Fastbin attack实现多指针指向一个地址,以及利用 ...