开源框架Caliburn.Micro
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
开源框架Caliburn.Micro的更多相关文章
- Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...
- Caliburn.Micro - 框架搭建
简介:Caliburn.Micro是Caliburn的一个轻量级版本开源架构,可以用于wpf,sliverlight,wp7等,和注重模块化的Prism比起来也有许多优点,具体比较可以参考 此文 ht ...
- WPF +MVVM(Caliburn.Micro)项目框架
最近做了一个软件,这个软件不是网站,但是与HTML,AJAX等技术密切相关,也不是只有单纯的数据库增删改查,还涉及到线程协调,比较复杂的文本处理…… 这样的软件,用OA,ERP的框架显然是不合适的,因 ...
- Caliburn Micro框架
Caliburn Micro框架快速上手(WP) 一.使用nuget添加起始工程 二.修改App.xaml文件和App.xaml.cs文件 AppBootstrapper介绍: AppBootst ...
- 【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架
Caliburn.Micro - Xaml made easy. web: https://github.com/Caliburn-Micro/Caliburn.Microdocument: http ...
- Caliburn.Micro(MVVM框架)
一.首启窗体设置 1. 创建一个新的WPF应用程序并添加NuGet包:Caliburn.Micro 2. 删除项目自带的主窗口文件MainWindow.xaml 3. 在App.xaml项目文件中,删 ...
- Caliburn.Micro框架之Action Convertions
首先新建一个项目,名称叫Caliburn.Micro.ActionConvertions 然后删掉MainWindow.xaml 然后去app.xaml删掉StartupUri这行代码 其次,安装Ca ...
- Caliburn.Micro框架之Bindings
新建一个WPF项目,将其命名为Caliburn.Micro.BindingsDemo 其次安装Caliburn.Micro,安装Caliburn.Micro的同时也会安装Caliburn.Micro. ...
- WPF 使用Caliburn.Micro 多线程打开窗口
我们都知道在WPF里面用多线程打开一个窗口很简单.如下 public void ClickMe(object sender) { Thread newWindowThread = new Thread ...
随机推荐
- 关于通过id查询记录的一些总结
最近在做一个oa系统,简化了账号的设置,列名均为id,类型均为varchar:有的表将id设置成了主键,有的表没有设置成主键. 通过举例说明通过id查询的一些问题. 之前登陆的时候,账号001-007 ...
- java7 语法糖 之 switch 声明string
Jdk7新switch 恒语句可以string种类. 例如: @Test public void test_1(){ String string = "hello"; switch ...
- Android Fragment 真正彻底的解决(下一个)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因.以及一些主要的使用方 ...
- e.target 和 e.srcElement 的使用问题
ie 下的event.srcElement从字面上可以看出来有以下关键字:事件.源(它的意思就是:当前事件的源), 我们可以调用他的各种属性就像:document.getElementById(&qu ...
- VisualStudio 自动排版等 快捷键
VisualStudio2010自动排版快捷键:全部代码排版:1. ctrl+E,D 按住ctrl,相继按下E.D 2. ctrl+K,F 按住ctr ...
- 10分钟学会Linux
10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...
- 教你一步一步部署.net免费空间OpenShift系列之二------创建应用
接上回书,注册完毕后需要在Openshift上创建一个应用空间,如如何创建空间呢,Openshift本身是不直接支持Mono来部署ASP.Net程序的,需要借助openshift-community- ...
- 脉冲神经网络Spiking neural network
(原文地址:维基百科) 简单介绍: 脉冲神经网络Spiking neuralnetworks (SNNs)是第三代神经网络模型,其模拟神经元更加接近实际,除此之外,把时间信息的影响也考虑当中.思路是这 ...
- Beginning Python From Novice to Professional (5) - 条件与循环
条件与循环 条件运行: name = raw_input('What is your name? ') if name.endswith('Gumby'): print 'Hello, Mr.Gumb ...
- ASP.NET状态服务及session丢失问题解决方案总结
原文:ASP.NET状态服务及session丢失问题解决方案总结[转载] asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule ...