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. nginx的一些文章

    [译] Nginx如何做流量控制 https://legolasng.github.io/2017/08/27/nginx-rate-limiting/ Nginx特性及原理介绍 http://www ...

  2. June 30th 2017 Week 26th Friday

    Love me little and love me long. 不求情意浓,但愿情意久. Some people say beautiful young people are the creatur ...

  3. ZT JAVA WeakReference

    JAVA WeakReference 分类: JAVA 2012-08-28 16:08 305人阅读 评论(0) 收藏 举报 javareferencehashmapcacheclassnull 在 ...

  4. 如何玩转Android远控(androrat)

    关于WebView中接口隐患与手机挂马利用的引深 看我是怎样改造Android远程控制工具AndroRat 1.修改布局界面 2.配置默认远程ip和端口 3.LauncherActivity修改为运行 ...

  5. 利用Underscore求数组的交集、并集和差集

    1 数组交集函数——intersection 数组的交集是指包含多个数组中的共同元素的一个数组,求数组的交集就是找出给定数组中的共有元素. 下面实现一个求两个数组交集的函数. 判断数组是够包含指定值, ...

  6. 批量压缩文件夹到Zip文件

    实现效果: 实现代码:

  7. 给windows添加路由

    route add 10.0.0.0 mask 255.0.0.0 172.16.1.253 -p

  8. 十二、IntelliJ IDEA 中的版本控制介绍(中)

    由于 IntelliJ IDEA 支持的版本控制工具非常的多,但咱们真正能够用到的也就两三个而已,因此在本篇博文中,咱们主要介绍 SVN.Git 和 GitHub 的配置方法. SVN 如果想要在 I ...

  9. HDU 1789 Doing Homework again(非常经典的贪心)

    Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  10. 基于vue脚手架的项目打包上线(发布)方法和误区

    最近要把vue脚手架开发的一个项目上线,只知道vue脚手架是基于node的服务端项目,那么只需要 npm run dev 就可以轻松启动整个项目,当我想当然的给服务器配置合适的node环境(这里也遇到 ...