【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架
Caliburn.Micro - Xaml made easy.
web: https://github.com/Caliburn-Micro/Caliburn.Microdocument: 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>
Silverlight / Windows Phone
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(约定)功能的体现。
【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架的更多相关文章
- 使用Caliburn.Micro系列1:新建项目并引入CM
一.WPF的几个MVVM模式实现 MVVMLight:小众的平民框架,实现简单粗暴. pass:最近更新在15年 官网: http://www.mvvmlight.net/ 最近一篇内容全面的好文: ...
- 界面之下:还原真实的 MV* 模式
界面之下:还原真实的MV*模式 作者:戴嘉华 转载请注明出处并保留原文链接( https://github.com/livoras/blog/issues/11 )和作者信息. 目录: 前言 MVC ...
- 【整理总结】目录 - 代码沉淀 - 常见Nuget包介绍及使用
为了团队项目或者后期代码维护方便,现在项目已经极致推荐使用Nuget管理第三方类库了,所以下面列举的类库,都会在Nuget上获取到.目录排序不分先后,如果查找困难,请使用 ctrl + F 重要提示: ...
- 【整理总结】代码沉淀 - CefSharp - 比较流行的第三方内嵌浏览器组件
.NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework web: https://github.com/ce ...
- Caliburn.Micro 项目文档(翻译):Screens, Conductors and Composition
原文地址(项目说明文档):[Documentation Screens, Conductors and Composition]http://caliburnmicro.codeplex.com/w ...
- WPF +MVVM(Caliburn.Micro)项目框架
最近做了一个软件,这个软件不是网站,但是与HTML,AJAX等技术密切相关,也不是只有单纯的数据库增删改查,还涉及到线程协调,比较复杂的文本处理…… 这样的软件,用OA,ERP的框架显然是不合适的,因 ...
- Caliburn实现MVVM模式的编程
引言:什么是Caliburn ? 一个夜晚,一处教堂,人们忏悔结束后抬头看到一把宝剑插在一块石头上.石上字述“英格兰人,凡能从石头上拔出剑者,为王者!”,Caliburn就是英格兰人心中的石中剑,这把 ...
- AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(一)
随着IOS7由之前UI的拟物化设计变为如今的扁平化设计,也许扁平化的时代要来了,当然我们是不是该吐槽一下,苹果什么时候也开始跟风了,自GOOGLE和微软界面扁平化过后,苹果也加入了这一队伍. Aval ...
- 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...
随机推荐
- SOJ 4309 Sum of xor 异或/思维
Source ftiasch 解题思路: 本题的题解有参考这里,但是那篇年代太久远,讲的也不甚清晰,所以可能会对很多新手造成困扰,所以又写了这一篇. 亦或有很多规律,本题使用到的是n^(n+1)=1, ...
- 使用泛型和内部静态类实现栈(FILO,先进后出)
package tuple; /** * 泛型实现的栈,FILO * @author Youjie * * @param <T> */ public class LinkedStack&l ...
- BZOJ1042:[HAOI2008]硬币购物(DP,容斥)
Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...
- BZOJ2223/3524:[POI2014] Couriers(主席树)
Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...
- [19/05/02-星期四] GOF23_行为型模式(状态模式、观察者模式、备忘录模式)
一.状态模式 [状态接口] /*** * 房间"状态"接口 */ package cn.sxt.state; public interface State { void handl ...
- size和len
size函数只能用于计算array,不能用于计算list,返回的是数组的元素个数 len函数既可以计算array,也可以计算list >>> a = np.array([1,2]) ...
- 树莓派gitlab
pi@raspberrypi:~/Downloads $ sudo dpkg -i gitlab-ce_8.17.7-ce.0_armhf.debSelecting previously unsele ...
- disconf实践(一)Ubuntu16.04部署disconf
在企业中,随着公司业务的扩张,用户量的增大,单一节点应用无法支撑正常的业务逻辑,比较常见的现象是访问速度变慢,甚至超时,严重时可能会造成系统宕机.为了尽量减少宕机的风险,单一节点系统需要进行水平扩展, ...
- sys_arch interface for lwIP 2.0.3
sys_arch interface for lwIP 2.0.3 Author: Adam Dunkels Simon Goldschmidt The operating system emulat ...
- 实际SQL案例解决方法整理_LEAD函数相关
表结构及数据如下: 需求: 将记录按照时间顺序排列,每三条记录为一组,若第二条记录与第一条记录相差5分钟,则删除该记录,若第三条与第二条记录相差5分钟,则删除该记录, 第二组同理,遍历全表,按要求删除 ...