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. Python函数(入门6)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407970.html 本文出自:[Edwin博客园] Python函数 1. Python之调用函数 pri ...

  2. 在powerdesigner 中出现Could not Initialize JavaVM! 应该怎么解决

    利用powerdesigner反向生成表结构时会报这个错: 请检查你的环境变量配置: 系统变量 CLASSPATH = E:\Workspaces\my-jar\mysql-connector-jav ...

  3. springMVC文件上传大小超过限制的问题

    [转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...

  4. BZOJ2141:排队(分块,树状数组)

    Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们 ...

  5. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  6. Python re模块正则表达式

  7. Git如何从github上pull别人的项目

    1:使用git方式导入项目 菜单-File->import->Git->Projects from Git 2:选择某个服务器上的资源 3:选择需要pull的地址 后面需要自己加上 ...

  8. maven下载依赖jar包失败处理方法--下载jar包到本地并安装到maven仓库中

    所有maven依赖jar包地址:https://repo1.maven.org/maven2/org/apache/ 1. 安装jar包失败报错: The following artifacts co ...

  9. webapi 获取json数据

    一般的我们可以直接使用参数来接受,这个就不多介绍了 [HttpGet] public IHttpActionResult Test2([FromUri]string name) { object ob ...

  10. Python之基本排序算法的实现

    import cProfile import random class SortAlgorithm: def __init__(self,unsortedlist=[]): self.unsorted ...