Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3,事件和参数Caliburn.Micro 杰的入门教程4,事件聚合器Caliburn.Micro 杰的入门教程5,窗口管理器Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介


Caliburn Micro Part 2: Data Binding and Events

原文地址:
http://www.mindscapehq.com/blog/index.php/2012/1/16/caliburn-micro-part-2-data-binding-and-events/

接下来的这篇文章我们将看看Caliburn Micro协助我们绑定数据和事件。 我们将要构建的应用程序概述了在前面的博客添加的一些简单的用户交互和数据显示。

1. Data binding

我们先将应用程序显示的数据存储在Model中。 AppViewModel类的创建类似于上一篇博文。添加一个名为Count的属性。 我们给一个默认值为50。 你可能还记得上次我们AppViewModel类继承了Caliburn Micro提供的PropertyChangedBase粗加工的属性更改通知。 而不是实现INotifyPropertyChanged接口,您可以在属性的setter中简单地调用NotifyOfPropertyChange方法:

public class AppViewModel : PropertyChangedBase
{
private int _count = ; public int Count
{
get { return _count; }
set
{
_count = value;
NotifyOfPropertyChange(() => Count);
}
}
}

接下来,我们修改视图来显示这个属性值。 在AppView.xaml中,添加一个TextBlock,如下:

<Grid MinWidth="300" MinHeight="300" Background="LightBlue">
<TextBlock Name="Count" Margin="20" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>

现在运行应用程序,看到TextBlock显示计数属性的默认值。

等一下…好神奇啊! 我不记得有设置过任何绑定TextBlock控件和Count属性,然而TextBlock却显示了正确的数据!
注意,我设置了TextBlock控件的name特性和我们想绑定的Count属性一样的名字。 这是Caliburn.Micro提供的一个方便的捷径。 TextBlock等元素,显示数据或文本框,设置他们的名字匹配属性的数据模型将为您自动关联起来。

2. Handling events

接下来,让我们添加一个按钮用来增加显示的数值。 快速又无聊的方式是把一个按钮的单击事件处理器的名称进行关联。 然而,当使用MVVM模式通常最好(但不是绝对必要的)避免使用这种代码后置的方法。 那么让我们来看看Caliburn Micro的处理事件特有的风格。
首先,在AppViewModel中添加一个递增计数的方法,如下:

public void IncrementCount()
{
Count++;
}

之后,在AppView.xaml中添加一个按钮,如下:

<Grid MinWidth="300" MinHeight="300" Background="LightBlue">
<RepeatButton Name="IncrementCount" Content="Up" Margin="15" VerticalAlignment="Top" />
<TextBlock Name="Count" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>

现在运行应用程序并单击按钮,尝试一下数字的增加效果。 这一次你会注意到,我们不需要做很多工作来绑定按钮的单击事件和IncrementCount方法。 对某些用户界面控件,如按钮,您可以简单地设置的name特性,来控制你想要绑定的方法的名称。 Caliburn Micro将自动绑定适当的用户控件的事件模型中指定的方法。这一个按钮示例中,Caliburn Micro会自动关联Click事件。 (你也可以手动指定哪个事件连接到哪个方法,下次我们将看)。

3. Event guards

当Caliburn Micro自动关联了Click事件和IncrementCount方法。便会自动寻找一个叫CanIncrementCount方法或属性。 通过添加CanIncrementCount方法或属性,您可以包括额外的逻辑,确定基于当前状态是否允许事件处理模型。
我们在AppViewModel中,添加以下属性:

public bool CanIncrementCount
{
get { return Count < ; }
}

因为这个逻辑是基于Count属性的值,我们还需要在CanIncrementCount计数值变化时,添加自动属性更改通知。
可在Count属性的setter中,添加这行代码:

NotifyOfPropertyChange(() => CanIncrementCount);

现在的Count属性,就变成这样:

  public int Count
{
get { return _count; }
set
{
_count = value;
NotifyOfPropertyChange(() => Count);
NotifyOfPropertyChange(() => CanIncrementCount);
}
}

再次运行应用程序,将增量值增加到100。 每次Count增量增加,都会通过CanIncrementCount判断可用性,一旦限制已经达到,按钮将变成不可用,防止用户进一步增加数值。

在本教程中我们看了几个方法,了解Caliburn Micro的一些工作。 现在你可以更快地使用数据绑定,属性更改通知、事件处理程序和事件监视,同时实现一个坚固的更容易测试和维护的MVVM应用程序。

Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)的更多相关文章

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

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

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

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

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

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

  4. Caliburn.Micro 杰的入门教程3,事件和参数

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

  5. Caliburn.Micro 杰的入门教程1(翻译)

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

  6. [WPF] Caliburn Micro学习三 Binding

    Caliburn Micro学习一 Installation Caliburn Micro学习二 Infrastructure 如果说WPF推崇的Binding开辟了一条UI开发新的方式——让写代码的 ...

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

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

  8. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

  9. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

随机推荐

  1. ListView实现分页加载(二)实现底布局

    上一篇中,我们搭建好了一个Demo.没有阅读的可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4866929.html 在这一篇中,我们将实现Lis ...

  2. BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3289 3289: Mato的文件管理 Time Limit: 40 Sec  Memory ...

  3. HDU 4676 Sum Of Gcd 【莫队 + 欧拉】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=4676 Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others ...

  4. Maven的一些基本命令

    mvn -v 查看maven版本 compile 编译 test 测试 package 打包 clean 删除target install 安装jar包到项目 使用 archetype 创建目录文件 ...

  5. Spring 通过XML配置装配Bean

    使用XML装配Bean需要定义对于的XML,需要引入对应的XML模式(XSD)文件,这些文件会定义配置Spring Bean的一些元素,简单的配置如下: <?xml version=" ...

  6. STL Vector使用

    http://blog.163.com/zhoumhan_0351/blog/static/399542272010225104536463 Vector 像一个快速的数组,其具有数组的快速索引方式. ...

  7. android 下使用Direct Texture

    要使用Direct Texture,需要有一份android系统的源码 部分C++代码如下: #include <stdio.h> #include <stdlib.h> #i ...

  8. http://imgbase64.duoshitong.com/ 图片转换 base64

    base64图片工具介绍: 1.支持 PNG.GIF.JPG.BMP.ICO 格式. 2.将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页.编辑器中. 这对于一 ...

  9. 第三天-零基础学习python

    1.回忆.列表方法,append(),extend(),insert() 2.列表获取元素: >>> member = ['HU','YU','HUYAN','HUJIAMU']   ...

  10. c和c++单链表

    c++版 #include<iostream> #include<malloc.h> using namespace std; struct node{ int data; n ...