一、WPF的几个MVVM模式实现

MVVMLight:小众的平民框架,实现简单粗暴。  pass:最近更新在15年

官网: http://www.mvvmlight.net/

最近一篇内容全面的好文: http://www.cnblogs.com/wzh2010/p/6920706.html

Caliburn.Micro:Caliburn的精简版本,化繁为简。引用官网原话:

  A small, yet powerful framework, designed for building applications across all XAML platforms. Its strong support for MV* patterns will enable you to build your solution quickly, without the need   to sacrifice code quality or testability.

  -- 用于创建各类型的XAML平台应用的精简而又强大的框架。强力支持MV*类的模式,使你的项目更快的建立,并且不牺牲代码质量以及可测试性。

Github: https://github.com/Caliburn-Micro/Caliburn.Micro

Prism: 高大上的牛*框架,具体还没使用过,暂不发表评论了。

Github:https://github.com/PrismLibrary/Prism

二、WPF项目中使用Caliburn.Micro

1、新建项目 Caliburn.Micro.Demo,并使用Nuget管理,查询到 Caliburn.Micro.Start(这是作者提供用于快速生成基本配置文件的),安装。

2、安装完成后,项目中会多出如下图标记文件及引用

3、此时启动还不会使用CM,运行的还是默认的MainView.xaml 窗体。需要做一些简单的修改。如下

 /// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
public App()
{
InitializeComponent();
}
}
<Application x:Class="Caliburn.Micro.Demo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Caliburn.Micro.Demo">
<!-- StartupUrl="MainWindow.xaml 移除,否则启动页不变"-->
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:AppBootstrapper x:Key="bootstrapper" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

4、再次运行时,启动界面就会变为CM框架生成的默认窗体 ShellView.xaml 。

5、默认使用的Ioc模式 SimpleContainer具体如何使用,不甚了解。所有还是换成微软提供大家熟知的MEF。具体修改代码如下:

 public class AppBootstrapper : BootstrapperBase
{
CompositionContainer container;
public AppBootstrapper()
{
Initialize();
}
protected override void Configure()
{
var catalog = new AggregateCatalog(
AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>());
this.container = new CompositionContainer(catalog); var batch = new CompositionBatch(); //如果还有自己的部件都加在这个地方
batch.AddExportedValue<IWindowManager>(new WindowManager());
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
batch.AddExportedValue(this.container); this.container.Compose(batch);
}
protected override object GetInstance(Type service, string key)
{
string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(service) : key;
var exports = container.GetExportedValues<object>(contract);
if (exports.Any())
{
return exports.First();
}
throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
return container.GetExportedValues<object>(AttributedModelServices.GetContractName(service));
}
protected override void BuildUp(object instance)
{
container.SatisfyImportsOnce(instance);
}
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
DisplayRootViewFor<IShell>();
}
}
using System.ComponentModel.Composition;

namespace Caliburn.Micro.Demo {
[Export(typeof(IShell))]
public class ShellViewModel : Caliburn.Micro.PropertyChangedBase, IShell { }
}

6、OK,最后,看一下完整的启动页面。

源码地址:https://pan.baidu.com/s/1eRYKyvK

使用Caliburn.Micro系列1:新建项目并引入CM的更多相关文章

  1. 使用Caliburn.Micro系列2:Convention

    CM中实现一个比较有意思的特性,就是智能匹配. 通常使用MVVM的写法:在匹配 View和ViewModel时会使用DataContext,在匹配数据属性时使用Binding,在匹配事件命令时使用Co ...

  2. Caliburn.Micro框架之Action Convertions

    首先新建一个项目,名称叫Caliburn.Micro.ActionConvertions 然后删掉MainWindow.xaml 然后去app.xaml删掉StartupUri这行代码 其次,安装Ca ...

  3. Caliburn.Micro框架之Bindings

    新建一个WPF项目,将其命名为Caliburn.Micro.BindingsDemo 其次安装Caliburn.Micro,安装Caliburn.Micro的同时也会安装Caliburn.Micro. ...

  4. [Caliburn.Micro专题][1]快速入门

    目录 1. 什么是Caliburn.Micro? 2. 我是否需要学习CM框架? 3. 如何下手? 3.1 需要理解以下几个概念: 3.2 工程概览 3.3 示例代码 开场白:本系列为个人学习记录,才 ...

  5. WPF +MVVM(Caliburn.Micro)项目框架

    最近做了一个软件,这个软件不是网站,但是与HTML,AJAX等技术密切相关,也不是只有单纯的数据库增删改查,还涉及到线程协调,比较复杂的文本处理…… 这样的软件,用OA,ERP的框架显然是不合适的,因 ...

  6. Caliburn.Micro 项目文档(翻译):Screens, Conductors and Composition

    原文地址(项目说明文档):[Documentation  Screens, Conductors and Composition]http://caliburnmicro.codeplex.com/w ...

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

    Caliburn.Micro - Xaml made easy. web: https://github.com/Caliburn-Micro/Caliburn.Microdocument: http ...

  8. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...

  9. Caliburn.Micro(MVVM框架)

    一.首启窗体设置 1. 创建一个新的WPF应用程序并添加NuGet包:Caliburn.Micro 2. 删除项目自带的主窗口文件MainWindow.xaml 3. 在App.xaml项目文件中,删 ...

随机推荐

  1. bzoj2683(要改一点代码)&&bzoj1176: [Balkan2007]Mokia

    仍然是一道cdq模版.. 那么对于一个询问,容斥一下分成四个,变成问(1,1)~(x,y),那么对于x,y,修改只有x'<=x&&y'<=y,才对询问有影响,那么加上读入顺 ...

  2. return value, output parameter,

    Return Value https://docs.microsoft.com/en-us/sql/t-sql/language-elements/return-transact-sql?view=s ...

  3. CentOS 7下修改rabbitmq打开文件数量方法

    以下为使用systemd的修改方法:   1.系统层修改: 通过修改sysctl配置,提高系统的打开文件数量 vim /etc/sysctl.conf,添加: fs.file-max = 65535 ...

  4. java的内部类解析

    内部类分为四种: 成员内部类.类方法与普通方法同级: 局部内部类.类方法内部,局部内部类有构造器,通过构造器把外部的变量传入局部内部类再使用是完全可以的 匿名内部类.匿名内部类是唯一没有构造器的类,和 ...

  5. 【POJ 1155】TELE

    [题目链接] 点击打开链接 [算法] 树形DP f[i][j]表示以i为根的子树中,选了j个叶子节点,所能带来的最大收益 不难发现这就是一个经典的背包问题,不过是在树上做背包罢了 最后,判断f[1][ ...

  6. Watir: 右键点击实例(某些如果应用AutoIt来做会更加简单高效)

    require 'watir' module Watir class Element def top_edge assert_exists assert_enabled ole_object.getB ...

  7. asp.net MVC Model 类的主键 int类型、string类型、GUID类型。

    在使用asp.net mvc进行定义 模型类的时候,一般情况下,我们都会定义一个属性为 int iD{get;set;} 或为int ClassNameID {get;set;},在这种情况下 1.I ...

  8. E20170524-gg

    Awesome   adj. 可怕的; 令人敬畏的; 使人畏惧的; 极好的;

  9. P2479 [SDOI2010]捉迷藏

    传送门 KDtree是个吼东西啊-- 枚举每一个点,然后求出离他距离最远和最近的点的距离,更新答案 然而为什么感觉KDtree只是因为剪枝才能跑得动呢-- //minamoto #include< ...

  10. 莫比乌斯反演总结——Chemist

    懵逼乌斯反演果然名不虚传,自闭了两天的我打算学习一下这一块比较实用的数论内容. (注:1.为了区分狄尼克雷卷积与乘法,本篇文章中乘号全部省略,卷积全部用" * "表示.2.用gcd ...