Caliburn.Micro - Xaml made easy.

web: https://github.com/Caliburn-Micro/Caliburn.Micro
document: http://caliburnmicro.com/documentation/
nuget: Install-Package Caliburn.Micro

用于建立各个XAML平台应用,如WPF,Silverlight,WP,支持MV*模式


更多相关项目,请访问代码沉淀目录

重要提示:请注意项目的版本,以官方最新版本为准。


在之前很早的博文中,我大体上翻译了一个系列的文章,只不过由于CM框架更新太快,再加上一个主要原因,自己翻译文章太慢,一个一个单词查,所以只翻译了一大半,不过也足够大家使用了。这一篇文章介绍的是V2和V3版本的稍微会新一些。不过新版本和旧版本主要用法差不多,请看下方的官方示范。

Basic Configuration, Actions and Conventions

1. 启动Visual Studio,新建一个解决方案 “Caliburn.Micro.Hello”,使用nuget方式(推荐),或者手动引用dll的方式,添加CM框架的类库和System.Windows.Interactivity.dll。
删除“MainPage.xaml”,修改 “App.xaml.cs” ,如下方所示:

namespace Caliburn.Micro.Hello {using System.Windows;public partial class App : Application {public App() {InitializeComponent();}}
}

2. CM框架更推荐使用View-Model-First方式,我们也这么干,创建第一个VM,名叫“ShellViewModel”,代码如下:

namespace Caliburn.Micro.Hello {using System.Windows;public class ShellViewModel : PropertyChangedBase {string name;public string Name {get { return name; }set {name = value;NotifyOfPropertyChange(() => Name);NotifyOfPropertyChange(() => CanSayHello);}}public bool CanSayHello {get { return !string.IsNullOrWhiteSpace(Name); }}public void SayHello() {MessageBox.Show(string.Format("Hello {0}!", Name)); //Don't do this in real life :)}}
}

可以看到,ShellViewModel 继承自 PropertyChangedBase,这个基类简单的定义了属性通知,可实现简单的通知界面更新功能。

3. 有了简单的VM,下面我们就定义一下 bootstrapper,建立一个新类“HelloBootstrapper”,代码如下:

namespace Caliburn.Micro.Hello {public class HelloBootstrapper : BootstrapperBase {public HelloBootstrapper() {Initialize();}protected override void OnStartup(object sender, StartupEventArgs e) {DisplayRootViewFor<ShellViewModel>();}}
}

这个 Bootsrapper 通过调用一个方法,定义了一个 “顶级ViewModel”。在程序启动时,CM框架在初始化时,就会加载这个顶级VM,并显示这个VM对应的View。
Bootsrapper 在一些常见的mvvm框架中,可以看做是配置入口,比如配置设置,配置注入容器,等等。

4. 下一步,我们用 HelloBootstrapper 替换默认的程序启动方式,修改 “App.xaml”,如下所示:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:Caliburn.Micro.Hello"x:Class="Caliburn.Micro.Hello.App"><Application.Resources><local:HelloBootstrapper x:Key="bootstrapper" /></Application.Resources>
</Application>

WPF:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:Caliburn.Micro.Hello"x:Class="Caliburn.Micro.Hello.App"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary><local:HelloBootstrapper x:Key="bootstrapper" /></ResourceDictionary></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

这里,我们为 App 添加了一个资源,资源名为“bootstrapper”,需要提醒的是,此处已经删除了 “Application.StartupUri” 属性的值,不需要通过默认方式启动窗体,改为通过CM框架的bootstrapper方式启动前面配置的那个  “顶级ViewModel”。

接下来,你可以尝试启动你的程序,会看到界面中有如下字样。

Caliburn.Micro.Hello.ShellView not found.

Caliburn.Micro 已经建立了一个 ShellViewModel,但是它还不知道如何显示,所以,我们需要一个对应的 View,接下来我们创建一个用户控件(User Control),名叫 “ShellView”,xaml代码如下:

<UserControl x:Class="Caliburn.Micro.Hello.ShellView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><StackPanel><TextBox x:Name="Name" /><Button x:Name="SayHello"Content="Click Me" /></StackPanel>
</UserControl>

再次启动你的程序,这次你就能看到刚刚定义的UI界面了。

尝试在TextBox内输入文字,当Button可用时,点击它,可以看到弹出了一个消息窗。

CM框架定义了一套简洁有效的 “命名约定” 功能,用于匹配 View 和 ViewModel 之间的联系。
其实,它就是获取到指定 VM 的全名,并移除了 “Model” 部分,剩下的部分便是对应的 View 了。
比如,对 “MyApp.ViewModels.MyViewModel” 来说,就会得到 “MyApp.Views.MyView”。

对比一下 View 和 ViewModel,能发现,View中有一个 TextBox 控件,【x:Name=”Name”】 部分,实现了绑定到ViewModel中的 “Name” 属性。还能发现,View中有一个 Button 控件,【x:Name=”SayHello”】部分,实现了绑定到ViewModel中的 ”SayHello” 方法。最后ViewModel中还有一个 “CanSayHello” 属性,会关联到方法 “SayHello”,绑定功能的可用性如让对应的按钮不可用。

这些功能,是VM的ActionMessage(绑定至方法)功能,和Conventions(约定)功能的体现。

转载于:https://www.cnblogs.com/aijiao/p/11078615.html

【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架相关推荐

  1. C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

    01 - 自定义引导程序 在上一部分中,我们讨论了Caliburn.Micro WPF应用程序的最基本配置,并演示了与操作和约定相关的两个简单功能.在这一部分中,我想进一步探讨Bootstrapper ...

  2. 【愚公系列】2023年02月 .NET CORE工具案例-Caliburn.Micro的使用基于WPF的改造的MVVM案例

    文章目录 前言 1.Caliburn.Micro是什么 2.Caliburn.Micro的主要功能 一.Caliburn.Micro的使用基于WPF的改造 1.项目介绍 2.安装软件包 3.改造App ...

  3. 界面之下:还原真实的MV*模式

    作者:戴嘉华 原文链接 前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论 ...

  4. 界面之下:还原真实的MV*模式 -( MVC , MVP , MVVM )

    UPDATE(2015-10-29):更新MV*关于业务逻辑的描述,此处感谢 @LuoPQ @finian 指出错误 作者:戴嘉华 转载请注明出处并保留原文链接( #11 )和作者信息. 目录: 前言 ...

  5. C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间 ...

  6. Illusion = Caliburn.Micro + MEF

    前言 准备使用Caliburn.Micro结合MEF写一个类似于VS2010的IDE框架,支持插件开发,Menu.Toolbar等的可配置性,还有一些功能如:Option,多语言,换肤等.一方面作为技 ...

  7. C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧

    01 - 关于Conventions Caliburn.Micro的一个主要特性是,它能够通过一系列约定消除对锅炉铭牌代码的需求.有些人喜欢习俗,有些人讨厌习俗.这就是为什么CM的约定是完全可定制的, ...

  8. C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦

    01 - Screens, Conductors and Composition Actions, Coroutines and Conventions往往最能吸引Caliburn.Micro的注意力 ...

  9. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥

    " 引言部分,总领全篇文章的中心内容." 01 - IResult and Coroutines 在前面,我提到了Actions概念的另一个引人注目的特性,称为协同程序.如果你以前 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记10 角点检测(二)Shi-Tomasi角点检测
  2. 人人都能学会的python编程教程14:高级特性1
  3. 更改as的默认gradle地址_面试官:谈谈这4种磁盘IO调度算法--CFQ、NOOP、Deadline、AS...
  4. js 字符串删除首尾_JavaScript trim 实现去除字符串首尾指定字符的简单方法
  5. http请求过程 Android,android HTTP网络请求回顾
  6. 岗位内推 | 微软亚洲互联网工程院自然语言处理组招聘算法研究实习生
  7. Flask-RESTful 快速入门
  8. html登录界面设计代码_最简洁实现Github登录的JS代码示例
  9. Jekyll本地搭建开发环境以及Github部署流程
  10. 远控免杀专题10--TheFatRat免杀
  11. 步进电机驱动器单片机控制电路
  12. MATLAB 结构矩阵和单元矩阵
  13. 反射+自定义属性拼接sql
  14. 计算机音乐吧粉刷匠,中班音乐歌曲《粉刷匠》
  15. 4g数据需要排序计算机内存,20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
  16. SpringBoot/SpringMVC整合Shiro:实现登录与注册(MD5加盐加密)
  17. 计算机放音乐声音小在吗调,用电脑在网上看电影时配乐音量太大,请问怎么只把配乐音量调小,而说话声不调小。...
  18. cadence Virtuoso ADE原理图库中的VCVS(压控电压源)使用
  19. nvenc硬件编码相关设置
  20. 批量删除数码照片或手机中的相机参数和个人隐私信息

热门文章

  1. linux代码实现进程监控,linux进程监控shell脚本代码
  2. 元素出现在页面时,添加动画,配合animate.css使用
  3. 【java笔记】常用函数式接口(3):Predicate接口
  4. vb 数组属性_[读书笔记]CSAPP:7[VB]机器级表示:函数
  5. python3 将列表中元素转化为字典_软件测试学Python(七):Python中的变量和标准数据类型...
  6. ftp服务器文件端口,ftp服务器端口用哪个文件
  7. no required module provides package github.com/gorilla/mux
  8. Linux下MySQL起动报错The server quit without updating PID file
  9. 期末数据结构复习的一点笔记
  10. ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作