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. phonegap的照相机 API

    一. Camera Api 简单介绍 Camera 选择使用摄像头拍照,或从设备相册中获取一张照片.图片以 base64 编码的 字符串或图片 URI 形式返回. 方法: 1. camera.getP ...

  2. 51nod 1832 先序遍历与后序遍历【二叉树+高精度】

    题目链接:51nod 1832 先序遍历与后序遍历 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的 ...

  3. 在一个jsp页面中引用另一个jsp文件的路径的问题

    为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...

  4. bzoj3609 [Heoi2014]人人尽说江南好

    Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家),最近他 想起了小时候在江南玩过的一个游戏.    在过去,人们是要边玩 ...

  5. Ubuntu14.04安装PowerDNS踩坑实录

    公司要使用PowerDNS,作为内网域名解析的工具.让我和另一组的同事学一下如何配置及调优.所以先找了两台服务器试着安装一下.这一装就是一个礼拜,经历了大大小小的坑,记下来以后可能需要参考.安装过程如 ...

  6. SOJ4480 Easy Problem IV (并查集)

    Time Limit: 3000 MS Memory Limit: 131072 K Description 据说 你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任 ...

  7. shiro权限配置的细节问题&认证

    细节: ---[urls]部分配置,其格式是    url=拦截器[参数] ,拦截器[参数] ---如果当前请求的 url 匹配 [urls] 部分或者某个url模式,将会执行配置的拦截器 ---an ...

  8. Hive之数据类型

    Hive之数据类型   (本文是基于多篇文章根据个人理解进行的整合,参考的文章见末尾的整理) 数据类型 Hive支持两种数据类型,一类叫原子数据类型,一类叫复杂数据类型.原子数据类型包括数值型.布尔型 ...

  9. HDU 1078 FatMouse and Cheese ( DP, DFS)

    HDU 1078 FatMouse and Cheese ( DP, DFS) 题目大意 给定一个 n * n 的矩阵, 矩阵的每个格子里都有一个值. 每次水平或垂直可以走 [1, k] 步, 从 ( ...

  10. plsql误删除数据,提交事务后如何找回?

    select * from tbs_rep_template as of timestamp to_timestamp('2018-07-12 14:23:00', 'yyyy-mm-dd hh24: ...