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和 ...
随机推荐
- Improving cache consistency redis和db的一致性维护
From http://simongui.github.io/2016/12/02/improving-cache-consistency.html A typically web applicat ...
- sso(single sign on)
sso系统使用 https://www.cnblogs.com/shuai-server/p/8987070.html 一:什么是sso(single sign on) ? sso(单点登录系统)简单 ...
- NPM cache相关
今天下午把package.lock.json用别人的替换了,然后编译一堆报错,这个问题弄了一下午. 总结一下经验: 1.关于npm cache NPM会把所有下载的包保存,放在用户文件夹下面,在我的w ...
- 基于IDEA的JavaWeb开发环境搭建
基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 ...
- 截取Excel字符串的部分字符
截取Excel字符串的部分字符 我们可以使用Mid.Left.Right等函数从长字符串内获取一部分字符. ①LEFT函数: LEFT(text,num_chars) Text是包含要提取字符的 ...
- Django应用的打包和应用的安装和卸载
将应用打包需要安装: setuptools 安装和卸载应用需要安装: pip 举例polls是一个应用包. polls文件夹中包含所有有关应用的文件. 打包应用: 首先,在你的Django项目之外,为 ...
- @autoclosure-可以让表达式自动封装成一个闭包:输入的是一个表达式
@autoclosure 在闭包前面加上@autoclosure func or(first:Bool,@autoclosure second:()->Bool) -> Bool { if ...
- mysqlslap执行基准测试
查看mysqlslap所支持的主要参数配置及说明如下 -a, --auto-generate-sql 由系统自动生成SQL脚本进行测试 Generate SQL where not supplied ...
- 针对Restful风格参数传递的请求获取真实url
昨天遇到这样一个问题,先简单介绍下. 业务场景 我们想要统计热点请求URL,进而进行分析优化 方案 通过过滤器获取到请求url(调用方法request.getservletpath),通过redis进 ...
- Mysql数据库的简单语法
Mysql数据库是目前使用最为广泛的数据对,对于小型企业的支持度,比oracle数据库友好很多. mysql数据库的基本语法 1:创建并且使用数据库 找出服务器上当前存在什么数据库: SHOW DAT ...