这两天试了下Stylet框架,这个框架虽然很小,但是功能齐全,简化了很多MVVM的代码,比如Command,对Dialog,MessageBox都有很好的支持。

开源地址 https://github.com/canton7/Stylet

新建一个WPF项目,添加NuGet引用

安装完成后会自动添加一个BootStrapper文件,这个文件是项目启动文件

  public class Bootstrapper : Bootstrapper<ShellViewModel>

BootStrapper<ShellViewModel>,这个是对应的启动窗体,Stylet是根据ViewModel去找对应的View去显示,ViewModel与View的名称要一致。

我们新添加一个窗体,界面上放一个文本和三个按钮,来体验下Stylet的绑定,命令,显示消息框和子窗体。

<Window x:Class="StyletTestNew.Pages.Window1View"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:StyletTestNew.Pages"mc:Ignorable="d"xmlns:s="https://github.com/canton7/Stylet"Title="Window1" Height="450" Width="800" d:DataContext="{d:DesignInstance local:Window1ViewModel}"><Grid><TextBox HorizontalAlignment="Left" Height="23" Margin="106,100,0,0" TextWrapping="Wrap" Text="{Binding FName,UpdateSourceTrigger=PropertyChanged}"   VerticalAlignment="Top" Width="120"/><Button Content="ChangeTxt" HorizontalAlignment="Left" Margin="365,179,0,0" VerticalAlignment="Top" Width="75" Command="{s:Action BtnCommand}"/><Button Content="ShowMessage" HorizontalAlignment="Left"  Command="{s:Action ShowMessage}"Margin="533,179,0,0" VerticalAlignment="Top" Width="75"/><Button Content="ShowDialog" HorizontalAlignment="Left"  Command="{s:Action ShowDialog}"Margin="649,179,0,0" VerticalAlignment="Top" Width="75"/></Grid>
</Window>

添加ViewModel,添加对应的属性和方法

public class Window1ViewModel : Screen{private IWindowManager _windowManger;private ShellViewModel _ChildDialog;public Window1ViewModel(IWindowManager windowManager,ShellViewModel ChildDialog){_windowManger = windowManager;_ChildDialog = ChildDialog;}public string FName { get; set; } = "ly";public void BtnCommand(){FName = DateTime.Now.ToString();}public bool CanBtnCommand{get{return  !string.IsNullOrWhiteSpace(FName);}}public void ShowMessage() => _windowManger.ShowMessageBox(FName);public void ShowDialog() => _windowManger.ShowDialog(_ChildDialog);}

我们可以看到Button绑定的是方法而不是命令对象

Stylet也可以像Command一样做CanCommandExecute的功能。

比如,文本框的Text为空,则不可以点按钮

  public bool CanBtnCommand{get{return  !string.IsNullOrWhiteSpace(FName);}}public void BtnCommand(){FName = DateTime.Now.ToString();}

在按钮绑定的方法名称前加个Can属性,实现的功能和CanCommandExecute功能一样。

大家发现我的ViewModel中没有实现INotifyPropertyChanged接口,这时,我们需要nuget一个类库PropertyChanged.Fody。Stylet完美支持PropertyChanged.Fody,不需要我们在去实现下INotifyPropertyChanged接口了。

关于PropertyChanged.Fody,大家可以看这篇文章,介绍的蛮详细的。

https://www.cnblogs.com/cqgis/p/6360231.html

Stylet也提供了ShowMessage和ShowDialog功能。IWindowManager接口内包含这些方法。

Stylet通过IOC依赖注入,将实例化的WindowManager对象传入ViewModel中。这样我们就可以在ViewModel中使用这些功能。

        private IWindowManager _windowManger;private ShellViewModel _ChildDialog;public Window1ViewModel(IWindowManager windowManager,ShellViewModel ChildDialog){_windowManger = windowManager;_ChildDialog = ChildDialog;}

  public void ShowMessage() => _windowManger.ShowMessageBox(FName);public void ShowDialog() => _windowManger.ShowDialog(_ChildDialog);

其中,ShowDialog时,传入的是ShellViewModel,Stylet通过ViewModel去找到了对应的View去显示。

先写到这!

转载于:https://www.cnblogs.com/czly/p/9146371.html

轻量级MVVM框架 Stylet相关推荐

  1. 疯狂 java轻量级框架_ViewModel从未如此清爽 - 轻量级WPF MVVM框架Stylet

    Stylet是我最近发现的一个WPF MVVM框架, 在博客园上搜了一下, 相关的文章基本没有, 所以写了这个入门的文章推荐给大家. Stylet是受Caliburn Micro项目的启发, 所以借鉴 ...

  2. android mvp mvvm ppt,还在用 MVP?快来试试 MVVM! Relight:轻量级 MVVM 框架

    优势 稳定 减少内存泄漏:新手很容易在线程切换的地方写出导致内存泄漏的代码,但如果把线程切换交给框架来做,出错的概率就大大降低. 减少 crash:根据我的开发经历,大部分 crash 都是空指针导致 ...

  3. android mvvm框架搭建_轻松搭建基于JetPack组件的MVVM框架

    原文链接:轻松搭建基于JetPack组件的MVVM框架 - 掘金 Brick github gitee 介绍 辅助android开发者搭建基于JetPack组件构建MVVM框架的注解处理框架.通过注解 ...

  4. JavaScript富应用MVC MVVM框架

    对框架的挑选 Ember.js.Backbone.js.Knockout.js.Spine.js.Batman.js , Angular.js 1. 轻量级的应用选择哪一个会比较好? 2. 那一个比较 ...

  5. 面试题目之:mvvm框架是什么?它与其他框架(jquery)的区别是什么?哪些场景适合?

    面试题目之:mvvm框架是什么?它与其他框架(jquery)的区别是什么?哪些场景适合? (1)mvvm框架是什么? MVVM是Model-View-ViewModel的简写 Model:模型 Vie ...

  6. Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)...

    在本文将以MVVM Light Toolkit为例讲解MVVM框架在现实中的使用入门,首先我们在http://mvvmlight.codeplex.com/下载它的MVVM框架下来.也可以通过 htt ...

  7. Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架

    雷锋网 AI 科技评论编者按:近期,Google 开源了轻量级 AutoML 框架-- AdaNet,该框架基于 TensorFlow,只需要少量的专家干预便能自动学习高质量模型,在提供学习保证(le ...

  8. 众里寻他千百度-- 轻量级持久化框架

    初衷 纯JDBC 持久化框架 轻量级持久化框架 设计思路 怎么使用 依赖 数据库配置 正式使用 数据库表结构 Java Bean结构 从数据库获取一条记录并转为对象 高级版 数据库内记录 JavaBe ...

  9. php yof框架特点_腾讯正式开源高性能超轻量级 PHP 框架 Biny

    概况 Biny是一款高性能的超轻量级PHP框架 遵循 MVC 模式,用于快速开发现代 Web 应用程序 Biny代码简洁优雅,对应用层,数据层,模板渲染层的封装简单易懂,能够快速上手使用 高性能,框架 ...

最新文章

  1. flipud--矩阵上下翻转
  2. 页面生命周期:DOMContentLoaded, load, beforeunload, unload
  3. CentOS6.7安装jdk1.8
  4. Ellex激光器参数与激光消融手术风险的关系
  5. jquery中如何表达本页网址_jquery中怎么跳转页面?
  6. 分享我做的博客园Skin(目前12个,最后更新时间2006-5-10 PM)
  7. Codeforces Round #693 (Div. 3) E. Correct Placement 思维
  8. js时间格式化通用方法
  9. java常量池方法区_Java方法区和运行时常量池溢出问题分析
  10. ofo 列入被执行人;摩拜 LV 跨界合作;iPhone X 遭黑客攻击 | 极客头条
  11. ipmitool查看内存信息_小技巧:Win7系统中查看电脑内存频率多少的方法
  12. linux发送邮件 脚本,linux脚本发送邮件 shell发送邮件(使用 msmtp+mutt+shell来实现)
  13. 「经济读物」一课经济学
  14. Android 圆形头像的两种实现方式
  15. 消失的数字(C语言)
  16. 小码王python_小码王为你解读Python编程课程
  17. java计算机毕业设计冠军体育用品购物网站MyBatis+系统+LW文档+源码+调试部署
  18. android10.0(Q) root QCOM-SM6125 user版本打开root权限
  19. 中兴ZTEWCDMA3G模块MF206
  20. UE4 蓝图实现NPC来回走动(带动画效果)

热门文章

  1. GPT-3会做小学应用题了!60亿击败1750亿,并非参数越大越好
  2. 论文速递:通过模拟大脑-解决深度学习中的灾难性遗忘
  3. 数据驱动的未来城市八大趋势
  4. 科技部发布新一批国家新一代人工智能开放创新平台
  5. 2019年AI实力对决:美国领跑,中国追赶,欧盟弱势
  6. Science:人工智能的发展离不开神经科学,先天结构或是下一个方向
  7. 新技术不断涌现,下一代云计算的突破口在哪里?
  8. 10年后的计算机会是怎样的?
  9. 十年之后,数字孪生将这样改变我们的工作与生活
  10. 专访盛大创始人陈天桥:未来的杀手级应用必将诞生于脑科学