-协同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 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
由于这个例子很简单我们把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="300" Width="300">
<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!");
}
-协同IResult的更多相关文章
- Caliburn.Micro学习笔记(五)----协同IResult
Caliburn.Micro学习笔记目录 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execu ...
- Caliburn.Micro学习笔记目录
Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...
- Caliburn.Micro学习笔记目录——li-peng
Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IE ...
- Caliburn.Micro - IResult and Coroutines
IResult and Coroutines 翻译[三台]:网址[http://home.cnblogs.com/u/3Tai/] Previously, I mentioned that there ...
- 茂名石化BPM应用实践 ——业务协同及服务共享平台建设和应用
一.茂名石化简介 茂名石化隶属于中国石油化工集团公司,创建于1955年,是国家"一五"期间156项重点项目之一.经过50多年的发展,茂名石化已成为我国生产规模最大的炼油化工企业之一 ...
- BPM协同平台解决方案分享
一.需求分析 企业信息化的过程都是从单纯解决一个业务功能问题,到解决企业内部业务流程问题,再扩展到解决不同业务流程的关联互动问题, 核心是业务的集成和业务的协同,需要有一个统一的业务协同平台. 国内的 ...
- 有一个团队协同工具,叫Worktile
项目管理,本是一个老生常谈的话题,曾几何时大碗云集在这个市场,其中不乏出现像微软.SAP.IBM.用友这样的名字.复杂而又冗繁的流程控制,让人们划分成两类人,一类是会使用这些工具和系统的人,另一类是不 ...
- Worktile协同特色之一:无处不在的关注
团队沟通中常见问题 在回答这个问题之前,我们不妨先来思考一下,团队成员之间互相配合沟通的几个问题:1. 任务的执行者在完成这个任务时,如何通知到此任务相关联的其他成员,比如该任务的后续任务执行者?2. ...
- Lua 学习笔记(九)协同程序(线程thread)
协同程序与线程thread差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和命令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区别在于,一个具有多个线程的 ...
随机推荐
- Javascript学习7 - 脚本化浏览器窗口
原文:Javascript学习7 - 脚本化浏览器窗口 本节讨论了文档对象模型.客户端Javascript下Window中的各项属性,包括计时器.Location对象.Histroy对象.窗口.浏览器 ...
- C++ friend 用法汇总
C++这位朋友同意之类的非公共成员的机制是一个类或函数访问,根据朋友的类型分为三种类型:一般非类成员函数为好友,类成员函数为好友.类为好友. 1 内容朋友 包括报表朋友的朋友以及朋友的定义.明默的感觉 ...
- php_linux_ubuntu_安装mysql_apache_php
用apt-get方法安装mysql5 + Apache2 + PHP5+Phpmyadmin [建议] http://www.sudu.cn/info/html/edu/20080102/283439 ...
- http层负载均衡之haproxy
http层负载均衡之haproxy实践篇(一) 方案 上篇文章讲到了负载均衡的相关理论知识,这篇文章我打算讲讲实践方法以及实践中遇到的问题 方案:haproxy http层负载均衡 安装一个hapro ...
- DOS批处理的字符串功能
原文:DOS批处理的字符串功能 DOS批处理的字符串功能 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特 ...
- python tcp socket 多线程
不多说,直接上代码 client.py #!/usr/bin/python import socket,sys,string host="localhost" port=8000 ...
- Errors occurred during the build. Errors running builder 'JavaScript Validator' on
eclipse又一次编译时候就会报错Errors occurred during the build. Errors running builder 'JavaScript Validator' on ...
- java中string和int互相转化
1 怎样将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- Enum:枚举
原文:Enum:枚举 枚举 (enum) 是值类型的一种特殊形式,它从 System.Enum 继承而来,并为基础的基元类型的值提供替代名称.枚举类型有名称.基础类型和一组字段.基础类型必须是一个内置 ...
- Appium Android Bootstrap源码分析之简介
在上一个系列中我们分析了UiAutomator的核心源码,对UiAutomator是怎么运行的原理有了根本的了解.今天我们会开始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium ...