Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)
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(翻译)的更多相关文章
- Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介
Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...
- Caliburn.Micro 杰的入门教程5,Window Manager 窗口管理器
Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...
- Caliburn.Micro 杰的入门教程4,事件聚合器
Caliburn.Micro 杰的入门教程1(原创翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(原创翻译)Caliburn.Micro 杰的入门 ...
- Caliburn.Micro 杰的入门教程3,事件和参数
Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...
- Caliburn.Micro 杰的入门教程1(翻译)
Caliburn.Micro 杰的入门教程1(原创翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程 ...
- [WPF] Caliburn Micro学习三 Binding
Caliburn Micro学习一 Installation Caliburn Micro学习二 Infrastructure 如果说WPF推崇的Binding开辟了一条UI开发新的方式——让写代码的 ...
- [Caliburn.Micro专题][1]快速入门
目录 1. 什么是Caliburn.Micro? 2. 我是否需要学习CM框架? 3. 如何下手? 3.1 需要理解以下几个概念: 3.2 工程概览 3.3 示例代码 开场白:本系列为个人学习记录,才 ...
- Docker入门教程(九)10个镜像相关的API
Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...
- Docker入门教程(七)Docker API
Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...
随机推荐
- Codeforces Round #436 (Div. 2)【A、B、C、D、E】
Codeforces Round #436 (Div. 2) 敲出一身冷汗...感觉自己宛如智障:( codeforces 864 A. Fair Game[水] 题意:已知n为偶数,有n张卡片,每张 ...
- 使用Fragment填充ViewPager
在上一篇文章中,讲解了使用PagerAdapter作为适配器时的ViewPager的使用方法.然后在实际项目中更多的使用Fragment作为页卡,因为实际开发中每一个页卡要复杂的多.而使用Fragme ...
- BZOJ4337:[BJOI2015]树的同构(树hash)
Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如 ...
- Windows与kali双系统安装启动项的选择问题
在安装kali的时候,选择了用linux的grub启动,但是在重启后发现启动项里已经没有Windows系统可以选择了. 网上资料说,进入kali的终端,输入以下命令: $ sudo update-gr ...
- HDU 4676 Sum Of Gcd 【莫队 + 欧拉】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=4676 Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others ...
- Educational Codeforces Round 55 (Rated for Div. 2) C. Multi-Subject Competition 【vector 预处理优化】
传送门:http://codeforces.com/contest/1082/problem/C C. Multi-Subject Competition time limit per test 2 ...
- mac无法使用80端口问题
前言:在mac os中,非root用户是无法使用小于1024的常用端口的.如果开发中需要用到80端口, 就要设置端口转发. hosts文件介绍(1)hosts文件是将域名和IP地址建立映射关系的系统文 ...
- HDU 1789 Doing Homework again(非常经典的贪心)
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- redhat6本地源NBD驱动安装
安装NBD驱动 一.配置本地yum源 1.挂载系统安装光盘 # mount /dev/cdrom /mnt/cdrom/ # mkdir /mnt/media # cp -rf /mnt/cdrom/ ...
- IOS本地日志记录解决方案
我们在项目中日志记录这块也算是比较重要的,有时候用户程序出什么问题,光靠服务器的日志还不能准确的找到问题 现在一般记录日志有几种方式: 1.使用第三方工具来记录日志,如腾讯的Bugly,它是只把程序的 ...