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和 ...
随机推荐
- C# 之 Request
Request.QueryString(取得地址栏参数值)获取地址栏中的参数,意思就是取得”?"号后面的参数值.如果是多个是用这”&”符号连接起来的.Request.form取得表单 ...
- 【pbrt】在c++程序中使用pbrt进行渲染
近段时间做一个关于水面的动画.由于我用c++实现水面动画的,然而使用c++我自己的渲染系统渲染结果被同学说是可视化不叫渲染,所以我决定修改一下…… 恰好进来在学习pbrt,所以索性就蛋疼了考虑直接用p ...
- SAP S/4HANA销售订单创建时,会自动触发生产订单的创建
这个自动触发的过程是怎么实现的? 使用下面的代码创建一个销售订单: DATA: ls_header TYPE bapisdhd1, ls_headerx TYPE bapisdhd1x, lt_bap ...
- copy "xxxxx\xx.dll xxxxxxx\ ” 已退出,代码为1 错误解决方法
右键=>属性=>生成事件里面,查看预先生成事件命令行和后期生成事件命令行,查看复制的Dll是否存在已经路径是否正确
- POJ-1284 Primitive Roots---原根&欧拉函数
题目链接: https://cn.vjudge.net/problem/POJ-1284 题目大意: 就是给出一个奇素数,求出他的原根的个数. 解题思路: 由于是m是奇素数,m的欧拉函数值为m - 1 ...
- js算法排序
一.选择算法排序(算法时间复杂度为O(n²)级别) 选择排序就是选择数组中的最小的树,依次排序.第一次选择最小的数放在第一位,第二次从剩余的元素中寻找最小的元素放在第二位,第三次在剩余的数中选择最小的 ...
- Android杀死进程方法
1. android.os.Process.killProcess(pid) 只能终止本程序的进程,无法终止其它的 具体代码如下: ?12 Process.killProcess(Process.my ...
- C#强大的编程功能
下面列出一些C#重要的功能 1.布尔条件 2.自动垃圾回收 3.标准库 4.组件版本 5.属性和事件 6.委托和事件管理 7.易于使用的泛型 8.索引器 9.条件编译 10.简单的多线程 11.LIN ...
- 给requests模块添加请求头列表和代理ip列表
Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,符合了Python语言的思想,通俗的说去繁存 ...
- 技巧:Vimdiff 使用(改)
技巧:Vimdiff 使用(改) 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff.希望能对在 U ...