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

http://www.mindscapehq.com/blog/index.php/2012/1/24/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,事件和参数的更多相关文章

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

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

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

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

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

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

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

    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. Log4J入门教程(二) 参数讲解

    继续接着Log4J入门教程(一)中的例子进行讲解,其中log4j.properties中的内容为    Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组 ...

  7. 前端组件化Polymer入门教程(8)——事件

    可以在listeners对象中监听事件 <x-custom></x-custom> <dom-module id="x-custom"> < ...

  8. 前端组件化Polymer入门教程(1)——初识&&安装

    前端组件化Polymer入门教程目录: 前端组件化Polymer入门教程(1)--初识&&安装 前端组件化Polymer入门教程(2)--快速入门 前端组件化Polymer入门教程(3 ...

  9. Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>

    Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...

随机推荐

  1. July 17th 2017 Week 29th Monday

    A heart is a heavy burden. 心,可是很重的. Follow your heart, but always take your brain with you. Easy to ...

  2. zip 函数

    zip 函数,看上去是打包的意思,其实功能是将多个可迭代对象,组合成一个个元组. zip(iter1,iter2) a,b = zip(*zip(iter1,iter2)) a = [1,2,3] b ...

  3. 安卓渗透测试工具Drozer学习笔记

    下载,并安装. pip安装即可,安装完成后可能会出现缺少twisted依赖库的问题 ➜ vul git:(master) ✗ drozer console connect drozer Server ...

  4. Cow Relays 【优先队列优化的BFS】USACO 2001 Open

    Cow Relays Time Limit: 1000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Tota ...

  5. Linux入门基础介绍

    概述: 1. linux是一个开源.免费的操作系统,其稳定性.安全性.处理多并发已经得到业界的认可,目前很多企业级的项目        都会部署到Linux/unix系统上. 2. 常见的操作系统(w ...

  6. 关于P/Invoke的闲话

    P/Invoke,Platform Invoke,平台调用,是.NET打通托管与非托管两个世界的通路,10来年前曾经研究过这方面的技术,还曾发表过相关文章在<程序员>上,呵呵. 昨天有需求 ...

  7. 论文笔记 | A Closer Look at Spatiotemporal Convolutions for Action Recognition

    ( 这篇博文为原创,如需转载本文请email我: leizhao.mail@qq.com, 并注明来源链接,THX!) 本文主要分享了一篇来自CVPR 2018的论文,A Closer Look at ...

  8. [转]HTTP报文接口及客户端和服务器端交互原理

    1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务.该模型的目的 ...

  9. python调用对象属性出错:AttributeError: 'function' object has no attribute '_name_'

    出错如下图所示: 原来是因为把__name__写成_name_, 下图为正确结果:

  10. 一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate

    一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点 ...