Caliburn.Micro学习笔记----引导类和命名匹配规则

 

用了几天时间看了一下开源框架Caliburn.Micro

这是他源码的地址http://caliburnmicro.codeplex.com/

文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记记录一下

学习Caliburn.Micro要有MEF和MVVM的基础

先说一下他的命名规则和引导类

以后我会把Caliburn.Micro的

Actions

IResult,IHandle

IConductor  ,Conductor<T>

这些常用功能写下来。

从一个小例子说起  Demo下载:BootstrapperAndConventions.rar

这个例子是有父窗体打开一下子窗体的小功能

程序要引入的三个类库

Caliburn.Micro

System.Windows.Interactivity

System.ComponentModel.Composition

上边两个Caliburn.Micro的例子里有提供下边的在Vs里就能找到

看一下引导类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public interface IShell
   {
 
   }
   public class MyBootstrapper:Bootstrapper<IShell>
   {
 
       private CompositionContainer _container;
 
       //用MEF组合部件
       protected override void Configure()
       {
           _container = new CompositionContainer(
               new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));
 
           ///如果还有自己的部件都加在这个地方
           CompositionBatch _batch = new CompositionBatch();
           _batch.AddExportedValue<IWindowManager>(new WindowManager());
           _batch.AddExportedValue<IEventAggregator>(new EventAggregator());
           _batch.AddExportedValue(_container);
 
 
           _container.Compose(_batch);
       }
       //根据传过来的key或名称得到实例
       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("找不到{0}实例", _contract));
       }
       //获取某一特定类型的所有实例
       protected override IEnumerable<object> GetAllInstances(Type service)
       {
           return _container.GetExportedValues<object>(AttributedModelServices.GetContractName(service));
       }
       //将实例传递给 Ioc 容器,使依赖关系注入
       protected override void BuildUp(object instance)
       {
           _container.SatisfyImportsOnce(instance);
       }
 
   }

我们要实现Bootstrapper<T>这个类

一般我用我MEF做为容器,重写这个类的三个方法,写法也比较固定,就像上边我写的那这样

如果有自己的一些东西需要配置可以写在Config里

除了上边的三个方法还有OnStartup和OnExit分别是程序进入和退出的执行事件,可根据自己的需要做相应的重写

下边看一下MainView和MainViewModel

1
2
3
4
5
6
7
8
9
<Window x:Class="WpfApplication1.MyMainView"
        Title="MyMainView" Height="300" Width="300">
    <StackPanel>
        <TextBlock x:Name="StrMain" FontSize="50"/>
        <Button x:Name="OpenOneChild" Content="OpenAWindow" Width="120" Height="30"/>
    </StackPanel>
</Window>

MainViewModel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
 
namespace WpfApplication1
{
    [Export(typeof(IShell))]
    public class MyMainViewModel
    {
        readonly IWindowManager _myWM;
        public string StrMain
        {
            get;
            private set;
        }
        [ImportingConstructor]
        public MyMainViewModel(IWindowManager wm)
        {
            StrMain = "Main!!!!!!";
            _myWM = wm;
        }
        MyChildOneViewModel _MyChildW = new MyChildOneViewModel();
        public void OpenOneChild()
        {
             
            _myWM.ShowDialog(_MyChildW);
        }
    }
}

你会发现MainView的后台代码和前台都没有指定ViewModel

这是Caliburn.Microj里很棒的一点命名匹配规则,它用利用反射和正则表达式去匹配View和ViewModel

系统现有的是自动匹配名称为View和ViewModel  、PageView和PageViewModel结尾的窗体和类

如果想自己定义一种匹配规则也是可以的,我这就就不讲了

运行起来你会发现

TextBlock和Button的属性和事件也自动匹配上了

代码里打开子窗体是用的Caliburn.Micro自己的IWindowManager接口

这是一个专门用来打开窗体的类

它可以以Show() ShowDialog还有ShowPopup形式打开窗体

今天就先说到这,下次会写一下Caliburn的Actions

Demo下载:BootstrapperAndConventions.rar

开源框架Caliburn.Micro的更多相关文章

  1. Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

    Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...

  2. Caliburn.Micro - 框架搭建

    简介:Caliburn.Micro是Caliburn的一个轻量级版本开源架构,可以用于wpf,sliverlight,wp7等,和注重模块化的Prism比起来也有许多优点,具体比较可以参考 此文 ht ...

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

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

  4. Caliburn Micro框架

    Caliburn Micro框架快速上手(WP)   一.使用nuget添加起始工程 二.修改App.xaml文件和App.xaml.cs文件 AppBootstrapper介绍: AppBootst ...

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

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

  6. Caliburn.Micro(MVVM框架)

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

  7. Caliburn.Micro框架之Action Convertions

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

  8. Caliburn.Micro框架之Bindings

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

  9. WPF 使用Caliburn.Micro 多线程打开窗口

    我们都知道在WPF里面用多线程打开一个窗口很简单.如下 public void ClickMe(object sender) { Thread newWindowThread = new Thread ...

随机推荐

  1. 【Cocos得知】技术要点通常的积累

    1.粒子特效 CCParticleSystem*sp = CCParticleSnow::create(); sp->setTexture(CCTextureCache::sharedTextu ...

  2. hdu 统计难题(map)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 map的强大之处,但是运行时间太长. 代码: #include <stdio.h> ...

  3. T4模版引擎之生成数据库实体类

    在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中我们使用的最普遍的是根据数据库生成实 ...

  4. iOS使用UIScrollView实现左右滑动UITableView和UICollectionView

    在UIScrollView嵌套UITableView这篇文章是非常,但该项目的需求,需要嵌套UICollectionView,和UICollectionView和UITableView有非常多的不同, ...

  5. 前端学习笔记(zepto或jquery)——对li标签的相关操作(四)

    对li标签的相关操作——五种方式给奇数项li标签设置样式 demo演示: 1 2 3 4 5 6 7 // 详解: 通常我们为多个li添加样式时常用的是使用filter,但我们在第三节中可以看到fil ...

  6. Android在真机调试的设置方法

    1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择[USB调试] 2. 用USB连接手机和电脑,并确保成功.步 ...

  7. Java对象比较器对泛型List进行排序-Demo

    针对形如:字段1 字段2 字段3 字段n 1 hello 26 7891 world 89 5562 what 55 4562 the 85 452 fuck 55 995 haha 98 455 以 ...

  8. 3-05. 寻求倒数第二链线性表K项目(15)(STL list应用 ZJU_PAT)

    主题链接:http://pat.zju.edu.cn/contests/ds/3-05 给定一系列正整数,请设计一个尽可能高效的算法.查找倒数第K个位置上的数字. 输入格式说明: 输入首先给出一个正整 ...

  9. 【 D3.js 入门系列 --- 9.6 】 生产的包图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 打包图( Pack ).用于包括与被包括的关系,也表示各个对象的权重, ...

  10. mongodb group包(最具体的、最受欢迎、最容易理解的解释)

    和数据库一样group经常常使用于统计.MongoDB的group还有非常多限制,如:返回结果集不能超过16M, group操作不会处理超过10000个唯一键.好像还不能利用索引[不非常确定]. Gr ...