Stylet介绍

Stylet 是一个小型但功能强大的 ViewModel 优先的 MVVM 框架,适用于 WPF (.NET 4.5.2+ 和 .NET Core 3.0+),它允许您编写易于测试的可维护和可扩展的代码。

Stylet 的目标是:

解决没有框架时阻碍 MVVM 开发的障碍、烦恼和不便,使用简单但强大的概念。

对于第一次接触您项目的人员来说是显而易见的:几乎没有什么魔法。

易于验证/验证。代码行数较少,并附有非常全面的测试套件。代码编写良好且文档齐全。

提供灵活性同时提供合理的默认值。框架的几乎任何部分都可以根据需要重写,但您可能不需要这样做。

它受到 Caliburn.Micro 的启发,分享了其许多概念,但去除了大多数魔法(用更强大的替代方案替换),并通过仅针对 MVVM、WPF 和 .NET 4.5.2 大幅简化了部分功能。

GitHub地址:https://github.com/canton7/Stylet

如何快速入门

第一,有一个Samples,克隆代码之后,可以先打开这个示例项目。

通过运行这几个项目,可以快速了解Stylet提供了什么功能。

第二,查看官方文档。

Style的官方文档地址:https://github.com/canton7/Stylet/wiki

作者通过这几个方面进行了说明:

现在就一起简单地看看Stylet的一些概念与设计!!

首先最重要的就是ViewModel优先!!

经典的MVVM结构中,视图知道如何实例化其ViewModel,而ViewModel通常不会直接通信,这种模式被称为视图优先。然而,反转这种模式——自己实例化ViewModel,然后让视图自动附加——提供了许多优势,使你可以以一种非常熟悉的方式组合你的ViewModel。这种ViewModel优先的方法是Stylet唯一支持的方法。

在Stylet中可以通过ViewModel自动绑定到对应的View,这样的话,就可以这样写:

在xaml文件中可以通过ViewModel找到对应的视图,非常方便!!

第二点就是Action!!

WPF 中使用的 ICommand 接口功能强大,但在 MVVM 架构中使用时显得笨拙。让 ViewModel 中响应按钮点击等操作的方法表示为属性而不是方法似乎不合逻辑。一个简单的 将导致每次点击按钮时调用 ViewModel 中的 DoSomething()。此外,如果你有一个名为 CanDoSomething 的布尔属性,它会被观察并用于确定按钮是否应启用或禁用。

Action还可以与事件一起使用,例如

在WPF中如果想要实现原生的命令还是挺麻烦的,虽然现在也有很多库可以简化了,但是看到Stylet这样的写法还是会被惊艳到,真的很方便!!

比如你在ViewModel中写了一个这样的方法:

 public void NavigateToPage1() => this.navigationController.NavigateToPage1();

在xaml中,你只要这样写就可以绑定上:

第三点就是属性通知的简化写法

Stylet自己封装了一个SetAndNotify,简洁了一点。

第四点就是实现了一个简单的IOC容器,在程序开始时会扫描程序集,把ViewModel都自动瞬态注入进去,因此你可以在Bootstrtapper中不需要自己显示注册,这样也方便了很多,体现了约定大于配置的思想吧。

当然也可以自己显示注册,比如这样的写法:

 protected override void ConfigureIoC(IStyletIoCBuilder builder)
{
builder.Bind<NavigationController>().And<INavigationController>().To<NavigationController>().InSingletonScope();
}

第5点就是实现了一个基类Screen

Screen 实现了 IActivateIDeactivateIGuardClose 等接口,允许你在视图模型激活、关闭时执行逻辑。

方法/属性 作用说明
OnActivate() 当 ViewModel 被导航到或激活时调用
OnDeactivate(bool close) 当 ViewModel 被关闭或导航销毁时调用
TryClose(bool? dialogResult = null) 请求关闭当前 Screen

第六点是提供了一个WindowManager

Stylet已经自动注册了,可以直接通过构造函数注入。

使用也很简单,有ShowDialog,这个会阻塞,适合需要用户确认才执行的情况;有ShowWindow,这个不会阻塞会直接显示一个窗体。

需要注意的是ViewModel对应的View需要继承自Window。

第7点是自带了一个The EventAggregator

也是跟WindowManager开箱即用,非常方便。

最后

虽然这个框架已经有一年多没有更新了,但是说实话这个框架用来构建中小型项目还是很方便的,感谢开源者的付出,感兴趣的朋友也可以探索一下这个框架。这个框架确实配的上它的简介:Stylet 一个非常轻量但强大的 ViewModel-First MVVM 框架。

WPF优秀项目推荐:Stylet 一个非常轻量但强大的 ViewModel-First MVVM 框架的更多相关文章

  1. WPF优秀组件推荐之MahApps

    概述 MahApps是一套基于WPF的界面组件,通过该组件,可以使用较小的开发成本实现一个相对很好的界面效果. 官方网站:MahApps.Metro - Home 开源代码:MahApps · Git ...

  2. WPF优秀组件推荐之LiveCharts

    概述 LiveCharts是一个比较漂亮的WPF图表控件,在数据变化时还会有动画切换的效果,并且样式也可以控制. 官方网站:Live Charts (lvcharts.net) 开源代码:GitHub ...

  3. WPF优秀组件推荐之FreeSpire

    概述 Spire是一套可以轻松处理Word.Excel和PDF的商业组件,需要收费,但是他有一套对应的免费组件FreeSpire可以使用,免费组件在功能上有一些限制(比如:excel的sheet数量不 ...

  4. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

  5. WPF优秀组件推荐之Stylet(一)

    一.简介 Stylet是基于WPF的一款MVVM组件,虽然WPF本身是自带MVVM功能的,但实现起来不是很方便 ,通过Stylet,用户可以用很少的代码就能享受MVVM带来的舒适体验. 目前Style ...

  6. Google Flutter Clock 大赛优秀项目推荐

    Flutter 在 Google 加持下,如今可以作为跨平台首选了.早在 Flutter 刚刚出现强势苗头,我作为第一批体验了一把,<Flutter 初尝:从 Java 无缝过渡>,不过也 ...

  7. 轻量、强大的代码编辑器控件-WinForm完美版

    前段时间做个小项目需要用到一个代码编辑器控件,但网上搜了半天,居然没发现一个完全满意的编辑器.现有的一些编辑器有: FastedTextBox 优点:1.  轻量. 2. 样式美观. 3. DEMO完 ...

  8. WPF优秀组件推荐之Stylet(二)

    上一篇文章介绍了Stylet的一些基本功能,本篇将介绍一些深入一点的功能. 依赖注入 在Bootstrapper 类中注入需要的对象: public class Bootstrapper : Boot ...

  9. GeoPackage - 一个简便轻量的本地地理数据库

    GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件.与操作系统无关的地理数据库. 当前标准是1.2.1,该版本的html版说明书:https://www.geopackag ...

  10. 自己使用的一个.NET轻量开发结构

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAABFCAIAAAAerjlvAAAE2UlEQVR4nO2a3U/bVhiH+bdyPaqpmx

随机推荐

  1. Java 把列表元素拼接字符串

    摘要:使用 Java Collectors.joining等方法把List中的所有元素通过指定的分隔符拼接为字符串. 目录 综述 使用For循环 StringUtils.join 函数 Collect ...

  2. java RSA公私钥生成工具类

    package cn.daenx.my.util; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; imp ...

  3. Hexo博客Next主题更换cdn加速访问

    有时候访问我的博客时,总是会出现cdn.jsdelivr.net无法访问或者访问速度过慢的情况.我的博客园使用的是BNDong/Cnblogs-Theme-SimpleMemory主题,也遇到的这样的 ...

  4. Agent-Memory 概述

    1. 结构化记忆生成 Chunks(块状记忆): 将文档分割成固定长度的连续文本段 适合处理长上下文任务(如阅读理解) 优点:简单易用,适合存储大量信息 缺点:可能缺乏语义关联性 Knowledge ...

  5. centos上redis的安装

    官网教程 redis安装官网 https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ 可以右下方看到安装到各 ...

  6. 【前端AI实践】Lingma:使用工具辅助开发让你停不下来

    如果你用过 GitHub Copilot,那你对 AI 编程助手应该不陌生.而 Lingma 是阿里云推出的一款专注于编程场景的智能编码助手. 它深度集成在 VS Code.JetBrains 等主流 ...

  7. Java线程池详解:高效并发编程的核心利器

    Java线程池详解:高效并发编程的核心利器 在高并发的Java应用中,频繁创建和销毁线程是非常消耗系统资源的操作.线程池作为Java并发编程的核心组件,不仅能够复用线程.降低系统开销,还能有效控制并发 ...

  8. [abc309 G] Ban Permutation

    G - Ban Permutation 首先看到绝对值,很烦,考虑取掉绝对值得到\(p_i\leq i-X\)或\(p_i\geq i+X\) 然后我们就自然而然有了一个暴力的想法,设\(dp[i][ ...

  9. Java源码分析系列笔记-17.ReentrantReadWriteLock

    目录 1. ReentrantReadWriteLock是什么 2. 非公平ReentrantReadWriteLock 2.1. 是什么 2.2. 怎么使用 2.3. 源码分析 2.3.1. uml ...

  10. 一文读懂Cookie、Session和Token:原理、区别与应用场景

    咱上网冲浪的时候,天天和各种网站.APP打交道.但HTTP协议有个"毛病"--它记性不好,每次请求都像第一次见面,根本不记得之前和你聊过啥.为了解决这个问题,程序员们整出了Cook ...