在今天的教程中,咱们将看一看的更先进的事件绑定方法并指定事件参数。 尝试这些特性,咱们将会进一步扩展在前面的两个博客中建立的应用程序。html
你可能记得上篇博客,咱们经过Caliburn.Micro提供的自动关联控件的name特性,关联对应的事件。 全部咱们须要作的仅仅是在一个View视图中设置按钮的名称,而后在与之对应的ViewModel视图模型中添加与name名称彻底相同的一个方法。 而后该按钮的单击事件将会自动链接调用适当的方法。 然而有时你须要显式地链接事件。为了提供事件参数或指定您想要使用哪些事件。 为此,Caliburn Micro提供了长语法和一个简短的语法两种实现方式。 长语法的优势是它与Microsoft Expression Blend的相容性。 简短的语法就更碉堡了,若是你对设计不感兴趣,想简单明了的办事。 下面让咱们开始学习如何使用语法。ide
1. Long Syntax(长语法)学习
最好的方法是修改现有的应用程序以使用长语法不改变当前的行为。
打开AppView.xaml项目文件,添加这两个命名空间:flex
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
而后, 将repeat button按钮进行修改:spa
<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参数,以下:code
<cal:ActionMessage MethodName="IncrementCount"> <cal:Parameter Value="1" /> </cal:ActionMessage>
如今,当按钮被按下时,它会将值做为参数传递给IncrementCount方法。 另外一个按钮添加到应用程序的参数2,而后运行该应用程序。 点击不一样的按钮将增量计数的值根据他们不一样的参数。 的价值属性的石中微观参数是一个依赖项属性,这意味着它还支持WPF数据绑定。 这容许您使用它在你遇到各类不一样的场景。orm
专家提示:因为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):
-----如下为其余内容,和本节教程关系不大,就不本身翻译修改了,请大致看看,若是须要请跳转到原文:
你能够找到有关使用Caliburn微从在线文档挂接事件的更多信息。我建议经过文档阅读这样能够更好地选择哪些方法用于在应用程序中各类事件的状况。你会发现有不少的有用的支持是Caliburn科技提供,和不少便利的约定,将采起工做过你的肩膀。该小抄是一个有用的网页书签。你还会发现,HelloExplicitAction,HelloParameters和BubblingAction样品是知识的良好来源。你能够从这个教程中使用的演示从这里长的语法,并从这里短语法下载该应用程序。