Caliburn Micro框架

摘要:
Main方法:WithParam将传入的参数和值写入类内的字典,Navigate调用内部BuildUri方法,将上一个字典中的键值对序列化为导航参数,根据ViewModel查找View路径,然后调用INavigationService接口定义的导航方法FrameAdapterCM。此类的核心功能如下:1.Hook程序的Frame、Navigation、Navigate2的导航事件。当导航被触发时,判断上一页的DataContext是否实现了IGuardClose和IDeactivate接口。如果实现了IGuardClose接口,则根据接口中定义的CanClose决定是否取消导航。
Caliburn Micro框架快速上手(WP)
 

一、使用nuget添加起始工程

   

Caliburn Micro框架第1张

   

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

   

AppBootstrapper介绍:

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

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

2、配置IOC容器

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

   

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

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

   

Caliburn Micro框架第2张

   

2、配置IOC容器:

   

Caliburn Micro框架第3张

   

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框架》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TCPDUMP pcap 规格严格linux下使用ffmpeg将amr转成mp3下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ThinkPHP部署

TP框架中使用单一入口文件作为调用框架中的方法属性处理业务逻辑,框架中的配置文件,分为3级框架级,应用级,分组级,加载顺序,框架级->应用级->分组级,后面的会覆盖前面的。 TP中的URL访问模式(路由模式): 访问模式也就是不同格式的url请求,tp框架中分4中访问模式 1.普通模式,http://域名/入口文件?m=分组名&c=控制...

开源一个功能完整的SpringBoot项目框架

开源一个功能完整的SpringBoot项目框架福利来了,给大家带来一个福利。最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。...

主流JavaScript框架(Dojo、Google Closure、jQuery、Prototype、Mootools和YUI)的分析和对比

本文主要选取了目前比较流行的JavaScript框架Dojo、Google Closure、jQuery、Prototype、Mootools和YUI进行对比,主要是根据网上的资料整理而成,希望可以供大家参考,如有错误欢迎指出:) 主流框架对比 Dojo(重量级框架) Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Cor...

http框架--Forest 的使用

引入jar包 <dependency> <groupId>com.dtflys.forest</groupId> <artifactId>spring-boot-starter-forest</artifactId> <version>1.3.0</version> <...

应用开发框架之——数据字典、原数据、模板

对象根据原数据动态生成,改变原数据,根据原数据动态生成的对象的属性也随之改变。 可以把原数据保存在数据表中,或者文件中。软件系统运行的时候读取这些原数据,然后动态地生成一些对象。 在管理软件里面,我们习惯性地叫数据字典。为此会专门设计一个数据字典的数据表来保存原数据。通过软件设置改变就是数据字典数据表里面的原数据。 模板,大概是c++的叫法。无论怎样,数据...

天网计划 php skymvc框架

简介:这是天网计划 php skymvc框架的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。 frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=339493' scrolling='no'>skymvc是一款轻量、简单的phpmvc框架,借鉴了各大...