Caliburn.Micro 杰的入门教程3,事件和参数
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 3: More About Events and Parameters
在今天的教程中,我们将看一看的更先进的事件绑定方法并指定事件参数。 尝试这些特性,我们将会进一步扩展在前面的两个博客中创建的应用程序。
你可能记得上篇博客,我们通过Caliburn.Micro提供的自动关联控件的name特性,关联对应的事件。 所有我们需要做的仅仅是在一个View视图中设置按钮的名称,然后在与之对应的ViewModel视图模型中添加与name名称完全相同的一个方法。 然后该按钮的单击事件将会自动连接调用适当的方法。 然而有时你需要显式地连接事件。为了提供事件参数或指定您想要使用哪些事件。 为此,Caliburn Micro提供了长语法和一个简短的语法两种实现方式。 长语法的优点是它与Microsoft Expression Blend的相容性。 简短的语法就更碉堡了,如果你对设计不感兴趣,想简单明了的办事。 下面让我们开始学习如何使用语法。
1. Long Syntax(长语法)
最好的方法是修改现有的应用程序以使用长语法不改变当前的行为。
打开AppView.xaml项目文件,添加这两个命名空间:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
然后, 将repeat button按钮进行修改:
<RepeatButton Content="Up" Margin="15" VerticalAlignment="Top">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="IncrementCount" />
</i:EventTrigger>
</i:Interaction.Triggers>
</RepeatButton>
运行应用程序,您将看到它看起来和之前一样的行为。 我们所做的是System.Windows.Interactivity下triggers的交互触发事件方法。 EventTrigger我们可以指定哪个事件我们想监听,通过Caliburn Micro的ActionMessage我们可以指定哪些方法应该调用。 使用这种方法可以使用相同的控制包含任意数量的事件触发监听其他事件。 所以你可以监听MouseEnter、MouseLeave等等用于执行额外的操作。
接下来让我们看看事件参数。 为了证明这一点,我们将添加另一个按钮,增量计数2。 在AppViewModel中,我们需要修改IncrementCount方法加入一个整数参数。 这个参数将用于改变Count属性。 IncrementCount方法现在看起来像这样:
public void IncrementCount(int delta)
{
Count += delta;
}
回到AppView,更新现有的repeat button按钮,给ActionMessage添加一个Caliburn Micro Parameter参数,如下:
<cal:ActionMessage MethodName="IncrementCount">
<cal:Parameter Value="1" />
</cal:ActionMessage>
现在,当按钮被按下时,它会将值作为参数传递给IncrementCount方法。 另一个按钮添加到应用程序的参数2,然后运行该应用程序。 点击不同的按钮将增量计数的值根据他们不同的参数。 的价值属性的石中微观参数是一个依赖项属性,这意味着它还支持WPF数据绑定。 这允许您使用它在你遇到各种不同的场景。
专家提示:由于flexibity使用数据绑定设置参数值,可以通过UI元素从视图模型。 你应该尽量避免这样做,你可能可以! UI元素的视图模型可以断裂MVVM建筑风格,可能导致未来的维护问题。
(此处翻译不清晰,我本来就不熟悉,不过这一段对于理解干扰不大)
2. Short Syntax(短语法)
现在学习如何使用简单的语法来做同样的事情。 看看这个,让我们从一个应用程序的最新副本开始,没有我们刚才的长语法实现。 我们将开始再次通过修改应用程序在不改变目前的行为。 这次我们只需要添加Caliburn Micro命名空间,并修改RepeatButton 按钮:
<RepeatButton Content="Up" Margin="15" VerticalAlignment="Top"
cal:Message.Attach="[Event Click] = [Action IncrementCount]" />
所有我们所做的是使用一个Caliburn Micro的附加属性(Message.Attach)指定我们感兴趣的事件,和要调用的方法。
接下来,我们看看简短的语法的事件参数使用方法。 和长语法的做法一样,修改IncrementCount方法。 加入一个Message.Attach事件参数使用消息。 将会看起来像这样:
cal:Message.Attach="[Event Click] = [Action IncrementCount(1)]"
事件的参数写在方法名称的方括号后。 我相信你能解决如何添加一个按钮,每次增加2的值。
简单语法,甚至支持数据绑定的一种特殊形式。 为了证明这一点,让我们添加一个按钮,增量的值是统计值本身。 换句话说,一个按钮,双倍增加计数的值。 您可以删除前面的博文中提到的价值高于100的那个CanIncrementCount事件监听。 重复按钮代码看起来是这样的:
<RepeatButton Content="Double" Margin="15"
cal:Message.Attach="[Event Click] = [Action IncrementCount(Count.Text)]" />
这里我将参数设置为了Count.Text,也就是绑定到一个TextBlock控件(name是“Count”)的“Text”属性,用于显示当前数值。注意这里,Caliburn Micro会自动的将我们传入的string类型的参数,转换成我们想要的int类型的数据。Caliburn Micro还提供另一种捷径,它会自动使用控件相应的属性,如果我们没有明确指定是哪个属性。
在上面的例子中,我们可以只写在TextBlock控件的“name”作为参数,Caliburn Micro将默认绑定到“Text”属性。就像这样:
3. Automatically Finding Parameters(自动关联参数)
完成本教程时,我要提一下。当你不显式设置它们的参数时,Caliburn Micro甚至有一套自动获取参数约定。如果你没有明确指定参数, Caliburn Micro会自动获取,定义的方法签名的(参数名称),然后尝试在View下的用户控件中匹配这个名字(忽略大小写)。一旦找到匹配的用户控件,控件的适当的属性就会被用来提供该参数。
举例来说:比如用户控件是一个TextBlock,Text属性值将被用来作为参数。之后, Caliburn Micro可自动字符(string)串转换为可能需要整数(int)等等。
为了更容易理解这个”约定“,就让我们在程序中做一个尝试。在程序中添加一个Slider(控件),命名为”Delta“,再添加一个Button(控件),命名为”IncrementCount“,正如以前的博客所说,该按钮被点击时会自动调用IncrementCount方法。但这次,该方法有一个参数,而且我们并没有为这个按钮指定任何其他的关联。但是请注意,我们添加Slider时,使用了和方法参数相同的名称(Delta)。因此只要单击该按钮,Caliburn Micro将自动使用Slider控件的Value属性作为参数方法。下面是需要添加的代码:
<UniformGrid Columns="2" VerticalAlignment="Bottom">
<Slider Name="Delta" Minimum="0" Maximum="5" Margin="15" />
<Button Name="IncrementCount" Content="Increment" Margin="15" />
</UniformGrid>
4.Extra for Experts(额外的专家级知识点)
这里,我只列举一些Caliburn Micro提供的挂接事件的支持(hooking up events):
- Setting action targets(设置行为参数)
- Special parameter values for data binding(数据绑定的一些特殊参数)
- Action bubbling(冒泡行为)
- Action guards with parameters(行为监视与参数)
-----以下为其他内容,和本节教程关系不大,就不自己翻译修改了,请大体看看,如果需要请跳转到原文:
你可以找到有关使用Caliburn微从在线文档挂接事件的更多信息。我建议通过文档阅读这样可以更好地选择哪些方法用于在应用程序中各种事件的情况。你会发现有很多的有用的支持是Caliburn科技提供,和很多便利的约定,将采取工作过你的肩膀。该小抄是一个有用的网页书签。你还会发现,HelloExplicitAction,HelloParameters和BubblingAction样品是知识的良好来源。
你可以从这个教程中使用的演示从这里长的语法,并从这里短语法下载该应用程序。
Caliburn.Micro 杰的入门教程3,事件和参数的更多相关文章
- Caliburn.Micro 杰的入门教程4,事件聚合器
Caliburn.Micro 杰的入门教程1(原创翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(原创翻译)Caliburn.Micro 杰的入门 ...
- 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 杰的入门教程2 ,了解Data Binding 和 Events(翻译)
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 杰的入门教程 ...
- Log4J入门教程(二) 参数讲解
继续接着Log4J入门教程(一)中的例子进行讲解,其中log4j.properties中的内容为 Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组 ...
- 前端组件化Polymer入门教程(8)——事件
可以在listeners对象中监听事件 <x-custom></x-custom> <dom-module id="x-custom"> < ...
- 前端组件化Polymer入门教程(1)——初识&&安装
前端组件化Polymer入门教程目录: 前端组件化Polymer入门教程(1)--初识&&安装 前端组件化Polymer入门教程(2)--快速入门 前端组件化Polymer入门教程(3 ...
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...
随机推荐
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...
- 解析纯真IP地址库
一周以来,一直在做 IP地址库的解析.从调研到编码到优化,大概花了有七八天的时间.感觉很好玩.总结一下整个做的过程. 1.关于IP 地址库的解析方式 目前主要的解析方式有两种:通过API,或通过IP数 ...
- PHP------XML
XML XML的含义:可扩展标记语言,设计出来的目的是:传输数据 HTML的含义:超文本标记语言,设计出来的目的是:显示数据 它们两个设计出来的目的是不一样的. 它们两个都是标记语言,相似性比较高. ...
- Visual C++中MFC消息的分类
Visual C++中MFC消息的分为三类:标准(窗口)消息.命令消息.控件消息. 1.标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或 ...
- HTMLFormElement获取表单里面所有的值然后以json形式返回
function HTMLFormElement(){ this.init(); return this.json; } HTMLFormElement.prototype.init = functi ...
- 安全过滤javascript,html,防止跨脚本攻击
本文改自: http://blog.51yip.com/php/1031.html 用户输入的东西是不可信认的,例如,用户注册,用户评论等,这样的数据,你不光要做好防sql的注入,还要防止JS的注入, ...
- MyBatis之Mapper XML 文件详解(一)
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- IOS中Hybird实现
现在Hybird这块,网上也有很多文章,最近研究了下,分享给大家. 什么是Hybird技术? 1.一般是指WebView和Native技术混合而成的一套技术方案 2.也可以理解成,非Native技术与 ...
- CentOS7.5二进制安装MySQL-5.6.40
安装依赖 yum install -y gcc gcc-c++ automake autoconf yum -y install cmake bison-devel ncurses-devel lib ...
- 03.安装jdk8作为系统环境
博客为日常工作学习积累总结: 1.安装JDK8 创建安装目录:mkdir /application/java8 解压-安装包自行下载:tar -zxf jdk-8u202-linux-x64.tar. ...