Caliburn Micro框架快速上手(WP)

 

一、使用nuget添加起始工程

二、修改App.xaml文件和App.xaml.cs文件

AppBootstrapper介绍:

AppBootstrapper根据中文的直译可以看出来此类的大概的作用,但笔者总结为:

1、负责接管程序生命周期中的事件(Lunch Deactivate等)

2、配置IOC容器

3、添加自定义的命名协定

1、负责接管程序生命周期中的事件:

之前的app生命周期相关的操作在AppBootstrapper里面可以通过重载找到,因此若程序原来逻辑中存在处理,放到对应的函数中即可

2、配置IOC容器:

CM框架中自带了一个容器,叫做PhoneContainer,很简洁的容器,提供了一系列的函数用来配置,如果希望使用其他容器,那么可以在AppBootstrapper中进行修改和配置 Container介绍

3、添加自定义命名协定:

CM有一套自动binding机制,可以根据控件的Name对应到VM中的属性上,并将控件设定的属性Binding到VM中对应的属性上。举个例子:

对于TextBox而言x:Name若设定为Title,那么便会自动将Textbox的Text属性自动Binding到TextBox的DataContext所在的VM的Title属性上(如果存在)

当然如果不喜欢这种方式,使用原始的Binding也是支持的。(笔者建议使用Text={Binding Title}更具可读性)

三、CM的View和ViewModel自动Binding机制

CM会根据内置的View、ViewModel 命名协定(Conventions)寻找View/ViewModel

具体的协定内容如下:

ViewModel

View

Convention

<EntityName>ViewModel

<EntityName>View

举例

TabViewModel

TabView

Convention

<EntityName>PageViewModel

<EntityName>Page

举例

OrderPageViewModel

OrderPage

Convention

<RootNS>.<ViewModelTypeName>

<RootNS>.<ViewTypeName>

举例

MyProject.MainPageViewModel

MyProject.MainPage

Convention

<RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>

<RootNS>.Views.[<ChildNS>].<ViewTypeName>

举例

MyProject.ViewModels.ShellViewModel

MyProject.Views.ShellView

MyProject.ViewModels.Utilities.SettingsViewModel

MyProject.Views.Utilities.SettingsView

命名协定详细的介绍

四、CM的页面导航处理

关键类:

UriBuilder

工作原理:

此类为一个Builder类用来构建导航的Uri。并根据View-ViewModel协定,根据ViewModel找到对应的View路径,然后进行导航。

主要方法:

WithParam

将传入的参数和值写入到类内部的字典中

Navigate

调用内部BuildUri方法,将之前字典中的键值对序列化成导航参数,根据ViewModel找到View路径,然后调用INavigationService接口定义的导航方法

FrameAdapter

CM内部实现了FrameAdapter这个类这个类的核心功能为:

1、Hook 程序的Frame的导航事件,Navigating,Navigated

2、在Navigating触发的时候

判断上一个页面的DataContext是否实现了IGuardClose和IDeactivate接口,若实现了IGuardClose接口,则根据接口中定义的CanClose来决定是否取消这次导航。若实现了IDeactive接口,则调用触发上一个页面的DataContext的Deactivate方法,具体代码在后面。

3、在Navigated触发的时候

通过反射调用页面的构造方法(因此xaml.cs文件甚至可以删除掉)

根据当前页面,根据View-ViewModel协定找到对应的ViewModel,将当前页面的DataContext设置为对应的ViewModel。

根据导航串中参数将参数注入到ViewModel中对应的属性上

根据命名协定对页面的子元素分别进行Binding

若ViewModel实现了IActivite接口,同时调用Activate

以上介绍可以到CM的主页上找到源码进行更进一步的查看,并加深理解

明白上述两个类的职责之后,那么当我们使用CM框架进行导航的时候,就可以清楚的了解CM是如何实现根据VM找到View然后导航,并且将对应的属性赋值上去了。

如果对CM框架有任何问题欢迎加入

WP8交流群:182659848

 
 

Caliburn Micro框架的更多相关文章

  1. Caliburn.Micro - 框架搭建

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

  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框架快速上手(WP)

    一.使用nuget添加起始工程         二.修改App.xaml文件和App.xaml.cs文件     AppBootstrapper介绍: AppBootstrapper根据中文的直译可以 ...

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

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

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

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

  7. [WPF] Caliburn Micro学习二 Infrastructure

    Caliburn Micro学习一 Installation http://blog.csdn.net/alvachien/article/details/12985415 Step 1. 无论是通过 ...

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

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

  9. 开源框架Caliburn.Micro

    Caliburn.Micro学习笔记----引导类和命名匹配规则   用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeple ...

随机推荐

  1. jQuery中的.height()、.innerHeight()和.outerHeight()

    jQuery中的.height()..innerHeight()和.outerHeight()和W3C的盒模型相关的几个获取元素尺寸的方法.对应的宽度获取方法分别为.width()..innerWid ...

  2. hdu 逆袭指数

    Problem Description   这依然是关于高富帅小明曾经的故事—— 尽管身处逆境,但小明一直没有放弃努力,除了搬砖,小明还研究过东方的八卦以及西方的星座,一直试图在命理上找到自己能够逆袭 ...

  3. IEnumerable,IQueryable的区别

    IEnumerable,IQueryable之前世今生 IEnumerable<T>在.Net2.0中我们已经很熟悉了.你想要利用Foreach迭代吗?实现IEnumerable<T ...

  4. C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...

  5. 从头开始学JavaScript (五)——操作符(二)

    原文:从头开始学JavaScript (五)--操作符(二) 一.乘性操作符 1.乘法:*      乘法操作符的一些特殊规则: 如果操作数都是数值,按照常规的乘法计算,如果乘积超过了ECMAscri ...

  6. 汽车之家购买价格PC真正的原因阿拉丁

        网行业风起云涌,先是6月3号汽车之家天价竞购百度PC阿拉丁.接着今天又有消息说易车拿下百度移动阿拉丁.易车拿下百度移动阿拉丁能够想象.但PC阿拉丁被向来不屑流量购买,以自主流量自居的汽车之家拿 ...

  7. IIS7伪静态化URL Rewrite模块

    原文 IIS7伪静态化URL Rewrite模块 在Win7安装了IIS7.5之后,搭建一些网站或者博客,但是IIS7.5本身没有URL Rewrite功能,也就是无法实现网址的伪静态化. 从网上找了 ...

  8. Android基础之——startActivityForResult启动界面并返回数据,上传头像

    在android应用的开发过程中,常常会出现启动一个界面后填写部分内容后带着数据返回启动前的界面,最典型的应用就是登录过程.在非常多应用程序的模块中,都有"我的"这个模块,在未登录 ...

  9. TypeScript入门

    博客园首发,转载请注明出处,多谢支持.http://www.cnblogs.com/xuema/ 一.TypeScript TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaSc ...

  10. openstack shelve/unshelve/stop浅析

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! stop的虚拟机仅仅是将虚拟 ...