CM中实现一个比较有意思的特性,就是智能匹配。

通常使用MVVM的写法:在匹配 View和ViewModel时会使用DataContext,在匹配数据属性时使用Binding,在匹配事件命令时使用Command。

而CM通过ElementConvention 实现它们的自动匹配,只需要遵循指定的命名规则[可自定义]。由于一个控件的事件有多种(比如:Button:Click,MouseEnter等等),CM提供了最常用的事件的绑定,可根据具体需求自定义。

自动绑定演示:

在View中添加如下代码:

<Window
x:Class="Caliburn.Micro.Demo.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org"> <Grid Background="White">
<TextBlock x:Name="TbMain" FontSize="50" />
<Button
x:Name="OpenOneChild"
Width="120"
Height="30"
Content="OpenOneWindow" />
</Grid> </Window>

在ViewModel中添加:

  public class ShellViewModel : Caliburn.Micro.PropertyChangedBase, IShell
{
private readonly IWindowManager windowManager; [ImportingConstructor]
public ShellViewModel(IWindowManager windowManager)
{
TbMain = "This is ShewView";
this.windowManager = windowManager;
}
private string _tbMain;
public string TbMain
{
get { return _tbMain; }
set
{
_tbMain = value;
NotifyOfPropertyChange(() => TbMain);
}
} public void OpenOneChild()
{
ChildOneViewModel oneViewModel=new ChildOneViewModel();
windowManager.ShowDialog(oneViewModel);
}

项目中新建一个ChildOneView.xaml和一个ChildOneViewModel.cs。

<Window
x:Class="Caliburn.Micro.Demo.ChildOneView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Caliburn.Micro.Demo"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="ChildOneView"
Width="300"
Height="300"
mc:Ignorable="d">
<StackPanel>
<TextBlock x:Name="ChildOne" />
<TextBox Text="{Binding ChildOne}" />
<TextBox />
</StackPanel>
</Window>
public class ChildOneViewModel:Screen
{
public ChildOneViewModel()
{
ChildOne = "This is ChildOneView";
} private string _childOne;
public string ChildOne
{
get { return _childOne; }
set
{
_childOne = value;
NotifyOfPropertyChange(()=>ChildOne);
}
} }

运行:

默认情况下,CM的Convention是默认开启的,可使用ViewModelBinder.ApplyConventionsByDefault = false;来关闭,或者直接使用通常写法,会自动覆盖Convention的自动绑定。

有些时候,在碰到一个属性绑定多个控件等问题时,用起来就不那么顺手了。所以平时也不太会使用此特性。

后面准备介绍一下数据绑定(Binding)和事件响应(Command)两大块的实现方式。

源码文件:http://pan.baidu.com/s/1gfHyhQN

使用Caliburn.Micro系列2:Convention的更多相关文章

  1. 使用Caliburn.Micro系列1:新建项目并引入CM

    一.WPF的几个MVVM模式实现 MVVMLight:小众的平民框架,实现简单粗暴.  pass:最近更新在15年 官网: http://www.mvvmlight.net/ 最近一篇内容全面的好文: ...

  2. Caliburn Micro框架

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

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

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

  4. Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介

    Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...

  5. Caliburn.Micro 杰的入门教程5,Window Manager 窗口管理器

    Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...

  6. Caliburn.Micro 杰的入门教程4,事件聚合器

    Caliburn.Micro 杰的入门教程1(原创翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(原创翻译)Caliburn.Micro 杰的入门 ...

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

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

  8. Caliburn.Micro学习笔记目录

    Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...

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

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

随机推荐

  1. java修改linux文件

    package vedio.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fil ...

  2. sphinx 针对tedfield搜索

    query = "(user can be admin)"  -> check all fields for the given words. If all words ar ...

  3. CentOS6.0忘记root密码解决办法

    说明操作系统:CentOS 6.0遇到问题:忘记管理员账号root的密码,进不了系统解决办法:重置root密码为123456操作: 开机启动系统,在进入系统之前按键盘上面的Esc键,会进入下面的界面 ...

  4. JAVA THINGKING (二)随笔

    1. 基本数据员的默认值 Boolean false Char '\u0000'(null) byte (byte)0 short  (short)0 int  0 long 0L float 0.0 ...

  5. 本地测试出现:Call to undefined function curl_init()

    网上搜索Call to undefined function curl_init(),清一色的以下解决办法: 1.在php.ini中找到extension=php_curl.dll,去掉前面的,php ...

  6. 一步一步学Vue(六)

    本篇继续介绍vue-router,我们需要要完成这样个demo:<分页显示文章列表>:这里我们以博客园首页列表为例简化处理: 按照上图框选所示,简单分为蓝色部分文章组件(ArticleIt ...

  7. centos配置nodejs和mysql

    我使用的是centos7.2 64位,弄了一大晚上试了各种方法,安装的nodejs就是启动不了服务器.全是IP能ping通,浏览器不能访问.端口都是打开了的.安全组也设置了,就是不行.最后阿里云客服电 ...

  8. Ruby Time类和Date类

    Time类 更新: 2017/06/23 更新了Data/Time在model模式下的便利方法 更新: 2018/10/12 修改了%Y相关描述防止误解  年月日时分秒,时区    生成  获取当前时 ...

  9. Linux 常用命令十二 top

    一.top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以 ...

  10. 创建swagger的springboot-stater,并在spring cloud zuul网关中引入

    Swagger 是一款RESTFUL接口的.基于YAML.JSON语言的文档在线自动生成.代码自动生成的工具. 通过在controller中添加注解,即可轻易实现代码文档化. Swagger提供ui界 ...