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

Stylet介绍

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

Stylet 的目标是:

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

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

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

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

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

GitHub地址:github.com/canton7/Sty...

如何快速入门

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

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

第二,查看官方文档。

Style的官方文档地址:github.com/canton7/Sty...

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

现在就一起简单地看看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中写了一个这样的方法:

csharp 复制代码
 public void NavigateToPage1() => this.navigationController.NavigateToPage1();

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

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

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

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

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

scss 复制代码
 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 框架。

相关推荐
2501_9307077812 小时前
使用C#代码更改 PowerPoint 幻灯片大小
开发语言·c#·powerpoint
Z_W_H_14 小时前
【C#】C#中值类型和引用类型参数传递的区别
开发语言·c#
用户83562907805115 小时前
使用 C# 高效解析 PDF 文档:文本与表格提取实战指南
后端·c#
rit843249915 小时前
C#实现的远程控制系统
前端·javascript·c#
wuguan_17 小时前
C#中的静态成员、常量和只读变量
开发语言·c#
秋雨雁南飞17 小时前
C# SignalR 添加Swagger
c#·swagger·signalr
张人玉17 小时前
C# 与西门子 PLC 通信:地址相关核心知识点
开发语言·microsoft·c#·plc
Yuuuuuuu17 小时前
WPF基于Canvas绘制多边形ROI
c#
缺点内向18 小时前
如何在 C# 中重命名 Excel 工作表并设置标签颜色
开发语言·c#·excel
a努力。18 小时前
网易Java面试被问:偏向锁在什么场景下反而降低性能?如何关闭?
java·开发语言·后端·面试·架构·c#