Caliburn.Micro学习笔记目录

今天说一下协同IResult

看一下IResult接口

 /// <summary>
/// Allows custom code to execute after the return of a action.
/// </summary>
public interface IResult {
/// <summary>
/// Executes the result using the specified context.
/// </summary>
/// <param name="context">The context.</param>
void Execute(ActionExecutionContext context); /// <summary>
/// Occurs when execution has completed.
/// </summary>
event EventHandler<ResultCompletionEventArgs> Completed;
}

Execute方法里写你要执行的事件,在最后执行事件Completed这是一定要执行的,不然会无法执行后继的yield部分

Execute 方法有一个ActionExecutionContext参数,这个参数与建立UI相关的IResult实现中

非常有用。它能提供的功能如下

public class ActionExecutionContext
{
public ActionMessage Message;
public FrameworkElement Source;
public object EventArgs;
public object Target;
public DependencyObject View;
public MethodInfo Method;
public Func<bool> CanExecute;
public object this[string key];
}

Message: 造成这 IResult 的调用原始 ActionMessage。

Source: FrameworkElement 触发执行的行动。

EventArgs: 与行动的触发器相关联的任何事件参数。

Target: 在实际的操作方法存在的类实例。

View: 与目标关联的视图。

Method: MethodInfo 指定要在目标实例上调用的方法。

CanExecute: 一个函数,如果操作可被调用、 虚假否则返回 true。

key index: 一个地方来存储/检索它可以对框架的扩展所使用的任何附加元数据。

做一个小Demo

源码:CaliburnIresult.rar

由于这个例子很简单我们把bootstrapper也写简单一些

    class HelloBootstrapper : Bootstrapper<MyViewModel>
{
}

这样就可以 了
新建一下Loader类去实现IResult接口

    public class Loader : IResult
{
readonly string _str;
public Loader(string str)
{
_str = str;
}
public void Execute(ActionExecutionContext context)
{
MessageBox.Show(_str + context.View);
Completed(this, new ResultCompletionEventArgs());//这个方法一定要加到这里,这个方法完成后才会执行后边的方法
} public event EventHandler<ResultCompletionEventArgs> Completed = (sender, args) =>
{
MessageBox.Show(((Loader)sender)._str );
};
}

前台我们就放一下button就可以

<Window x:Class="CaliburnIresult.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org"
Title="MyView" Height="" Width="">
<Grid>
<Button Content="IResult" cal:Message.Attach="MyIResultClick"/>
</Grid>
</Window>

在ViewModel里我们看一下它的方法实现

        public IEnumerable<IResult> MyIResultClick()
{
yield return new Loader("load.....");
yield return new Loader("Ok!");
}

源码:CaliburnIresult.rar

Caliburn.Micro学习笔记(五)----协同IResult的更多相关文章

  1. Caliburn.Micro学习笔记目录

    Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...

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

    Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...

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

    Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...

  4. Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能

    Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双 ...

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

    Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...

  6. Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>

    Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...

  7. Caliburn.Micro学习笔记目录——Zhouyongh

    解析Caliburn.Micro(一) 解析Caliburn.Micro(二) 解析Caliburn.Micro(三) 解析Caliburn.Micro(四) Illusion = Caliburn. ...

  8. Caliburn micro 学习笔记...

    页面跳转 LLS 结合 CM 使用方法 事件处理

  9. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

随机推荐

  1. 分享15个优秀的 CSS 解决方案和工具

    CSS 代码是很难管理,尤其是在大型项目. 样式都写在一个全局作用域里,通过复杂的选择器来指向特定的页面元素.冗余.膨胀和维护可以成为前端开发人员的一场噩梦.幸运的是我们有一些 CSS 工具来帮助开发 ...

  2. Cropper – 简单的 jQuery 图片裁剪插件

    Cropper 是一个简单的 jQuery 图像裁剪插件.它支持选项,方法,事件,触摸(移动),缩放,旋转.输出的裁剪数据基于原始图像大小,这样你就可以用它们来直接裁剪图像. 如果你尝试裁剪跨域图像, ...

  3. Google C++单元测试框架GoogleTest---GTest的Sample1和编写单元测试的步骤

    如果你还没有搭建gtest框架,可以参考我之前的博客:http://www.cnblogs.com/jycboy/p/6001153.html.. 1.The first sample: sample ...

  4. UILabel

    //UILabel->UIView /* 1.实例化 2.属性 3.添加到父视图上 */ //实例化 UILabel *label = [[UILabel alloc] initWithFram ...

  5. iOS 疑难杂症 — — 复制 Storyborad 莫名崩溃

    声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 复制无处不在,用 Story ...

  6. iOS 学习 - 21 系统自带解析 XML

    准备工作: new -> file -> other -> Empty ,在 Save As: 中随便起个名字后缀为 .xml 拷贝下面 <person> <stu ...

  7. python之socket-ssh实例

    本文转载自大王http://www.cnblogs.com/alex3714/articles/5830365.html 加有自己的注释,应该会比原文更突出重点些 一. 基本Socket实例 前面讲了 ...

  8. python爬虫—爬取百度百科数据

    爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数 ...

  9. SQLServer 日期函数大全

    一.统计语句 1.--统计当前[>当天00点以后的数据] ) ) ORDER BY dateandtime DESC 2.--统计本周 3.--统计本月 4.统计当前 SELECT * FROM ...

  10. PostgreSQL-function、trigger

    增加一个自动记录更新时间的触发器, 第一步,先写一个函数,返回触发器类型的 create function spam_keyword_update_trigger() returns trigger ...