Caliburn.Micro学习笔记(二)----Actions
上一篇已经简单说了一下引导类和简单的控件绑定
我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧
今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持
我们还是从做例子开始
demo的源码下载在文章的最后
例子1.无参数方法调用
点击button把textBox输入的文本弹出来
如果textbox里没有文本button不可点,看一下效果图


看一下前台代码
<StackPanel>
<TextBox x:Name="Mytxt" /> <Button Height="" Margin="0,3" Content="Click Me">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="MyClick">
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
是通过行为把click事件传递给Myclick方法
也可以这么写
<Button Height="" Margin="0,3" Content="Click Me2" cal:Message.Attach="[Event Click]=[Action MyClick()]"/>
因为没有参数Action MyClick() 的括号可以不用写直接写成Action MyClick也可以
如果你用其它的控件想把事件和viewmodel里的方法关联起来这个是一样的把Click换成其它的事件就ok
viewModel的代码
[Export(typeof(IShell))]
class AppViewModel: PropertyChangedBase,IShell
{ private string _Mytxt;
public string Mytxt
{
get
{
return _Mytxt;
}
set
{
_Mytxt = value;
NotifyOfPropertyChange(() => Mytxt);
NotifyOfPropertyChange(() => CanMyClick);
}
} public bool CanMyClick
{
get
{ return !string.IsNullOrEmpty(_Mytxt); }
} public void MyClick()
{
MessageBox.Show(_Mytxt);
}
}
你会发现有一个MyClick方法和一个CanMyClick的布尔属性,这就是控制button的IsEnable属性这是Caliburn的一个规则
2.有参数的方法和控件元素绑定
有参数的方法关联其实是一样的
我们把上边的例子做一下修改
先看一下效果图 三个button调用 的同一个方法

看一下前台页面如何调用同一个方法
<Window x:Class="CalibrunMicAction.AppView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
Title="AppView" Height="" Width="">
<StackPanel>
<TextBox x:Name="Mytxt" /> <Button Height="" Margin="0,3" Content="Click Me">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="MyClick">
<cal:Parameter Value="{Binding ElementName=Mytxt,Path=Text}"/>
<cal:Parameter Value="aaabbbccc"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Height="" Margin="0,3" Content="Click Me2" cal:Message.Attach="[Event Click]=[Action MyClick($source,'aaaa')]"/>
<Button Height="" Margin="0,3" Content="Click Me3" cal:Message.Attach="[Event Click]=[Action MyClick($source,Mytxt.Text)]"/>
</StackPanel>
</Window>
我们把MyClick方法改成两个参数的方法一个是object类型一个是string类型
注意:第一个button和第三个button都是把textbox的text元素当做参数传给MyClick方法只是两种不同的写法
$source等会我再详细说它是绑定的控件本身在这个demo里就是button从弹出来的提示你也可以看出来。
再看一下ViewModel是怎么操作的
[Export(typeof(IShell))]
class AppViewModel: PropertyChangedBase,IShell
{ private string _Mytxt;
public string Mytxt
{
get
{
return _Mytxt;
}
set
{
_Mytxt = value;
NotifyOfPropertyChange(() => Mytxt);
NotifyOfPropertyChange(() => CanMyClick);
}
} public bool CanMyClick
{
get
{ return !string.IsNullOrEmpty(_Mytxt); }
} public void MyClick(object str,string str2)
{
MessageBox.Show(str.ToString()+" "+str2);
}
}
我们说一下上面看到的$source Caliburn.Micro提供了一些定义好的参数(不区分大小写)供我们在传递时用 ,当然我们也可以自定义我们自己的参数
$eventArgs — — 将触发器的 EventArgs 或输入的参数传递到您的行动。
$dataContext — — ActionMessage 附加到的元素的 DataContext
$source — — 触发 ActionMessage 的控件
$view -绑定到 ViewModel 视图 (通常是用户控件或窗口)。
$executionContext -包含上述所有信息和更多的行动的执行上下文。
$this -行动所附加到的实际用户界面元素
这个$this感觉和$dataContext没什么区别
如果想自定义参数可以写到用这个方法MessageBinder.SpecialValues进行扩展
我们来写一个自定义的参数
要在 Mybootstrapper的config里写

怎么用呢,我们在原来的例子上再加上一个button
<Button Height="" Margin="0,3" Content="Click Me4" cal:Message.Attach="[Event Click]=[Action MyClick($mysender,Mytxt.Text)]"/>
看一下它弹出来什么
细心的人会发现它和$source弹出来的是一样的。
这是Caliburn.Micro Action的源码,默认的是Click和控件的LeftMouseButtonDown事件,有时间你可以详细读一下它的源码

Demo源码:CalibrunMicAction.rar
Caliburn.Micro学习笔记(二)----Actions的更多相关文章
- Caliburn.Micro学习笔记目录
Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...
- Caliburn.Micro学习笔记目录——li-peng
Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...
- Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...
- Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能
Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双 ...
- Caliburn.Micro学习笔记(五)----协同IResult
Caliburn.Micro学习笔记目录 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execu ...
- Caliburn.Micro学习笔记目录——Zhouyongh
解析Caliburn.Micro(一) 解析Caliburn.Micro(二) 解析Caliburn.Micro(三) 解析Caliburn.Micro(四) Illusion = Caliburn. ...
- Caliburn micro 学习笔记...
页面跳转 LLS 结合 CM 使用方法 事件处理
- [WPF] Caliburn Micro学习二 Infrastructure
Caliburn Micro学习一 Installation http://blog.csdn.net/alvachien/article/details/12985415 Step 1. 无论是通过 ...
随机推荐
- JS如何禁止别人查看网站源码
四种查看路径: 查看效果:猛戳 1.直接按F12 2.Ctrl+Shift+I查看 3.鼠标点击右键查看 4.Ctrl+u=view-source:+url 把以上三种状态都屏蔽掉就可以了,docum ...
- jquery编写插件的方法
版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2 ...
- Aspose.Words基本操作
一个非常好用的控件. 基本的操作可以参考伍大神的文章: http://www.cnblogs.com/wuhuacong/archive/2012/08/30/2662961.html 在这里补充四点 ...
- Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现
如果一个文档列表中存放了成百上千的文档,想要快速的找到你想要的还真不是件容易的事,Sharepoint提供了Metedata Navigation与Key Filter功能可以帮助我们快速的过滤和定位 ...
- iOS多线程之5.GCD的基本使用
上一篇文章我对GCD的几个基本概念做了介绍,但是大家看完了可能觉得对理解GCD并没有什么卵用.其实会用GCD其实很简单,只要记住两条就可以了. 1. 主队列里的任务必须在异步函数中执行. 主队 ...
- React Native知识5-Touchable类组件
React Native 没有像web那样可以给元素绑定click事件,前面我们已经知道Text组件有onPress事件,为了给其他组件 也绑定点击事件,React Native提供了3个组件来做这件 ...
- IOS-WebViewJavascriptBridge使用说明
下面来说一下WebViewJavascriptBridge在ios端怎么样使用. 首先确保一份已经配好功能的html文件. 1.初始化一个webview(viewdidload) UIWebView* ...
- 解决方法:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
在Windows Server 2008 x64 上部署一个Vs 2008开发的.net2.0 的asp.net web 程序,调用了office的组件来导入导出excel文件,其中托管管道模式为集成 ...
- ORACLE临时表空间总结
临时表空间概念 临时表空间用来管理数据库排序操作以及用于存储临时表.中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入 ...
- ansible 初探nginx安装
我的配置: /etc/hosts: /etc/ansible/hosts: nglinx安装包: ansible自动化安装nginx: 1.安装ansible. 2.创建目录结构: mkdir -p ...