Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions

上一篇已经简单说了一下引导类和简单的控件绑定

我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧

今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持

我们还是从做例子开始

demo的源码下载在文章的最后

例子1.无参数方法调用

点击button把textBox输入的文本弹出来

如果textbox里没有文本button不可点,看一下效果图

看一下前台代码

 <StackPanel>
        <TextBox x:Name="Mytxt" />

        <Button Height="30" 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="30" 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="300" Width="300">
    <StackPanel>
        <TextBox x:Name="Mytxt" />

        <Button Height="30" 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="30" Margin="0,3" Content="Click Me2" cal:Message.Attach="[Event Click]=[Action MyClick($source,‘aaaa‘)]"/>
        <Button Height="30" 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="30" 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

时间: 2024-08-01 22:42:56

Caliburn.Micro学习笔记(二)----Actions的相关文章

Caliburn.Micro学习笔记目录——li-peng

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记目录

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记(五)----协同IResult 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute after the return of a action. /// </summary> public interface IResult { /// <summary> /// Executes the result using the specif

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它