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

简介: Caliburn.Micro学习笔记目录 今天说一下协同IResult 看一下IResult接口 /// /// Allows custom code to execute after the return of a action.

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="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!");
        }

 源码:CaliburnIresult.rar

 

 

目录
相关文章
|
传感器 存储 物联网
STM32F103产品级开源项目:iLook.Time设计解读
STM32F103产品级开源项目:iLook.Time设计解读
126 0
|
网络协议 物联网 数据处理
RISC-V生态全景解析(十二):YoC组件介绍系列二:AT组件
自上期开始,我们开启了YoC组件系列内容的介绍,并带大家了解了YoC的CSI组件。本期将为大家介绍的是YoC的AT组件。本文将详细阐述AT组件的使用原理,开发所需要的其他依赖组件资源,以及在网络方面的应用,以帮助广大开发者熟悉AT组件的使用。
549 0
RISC-V生态全景解析(十二):YoC组件介绍系列二:AT组件
|
编解码 算法 Serverless
阿里云 FaaS (FPGA as a Service) 舜天平台合作探讨|学习笔记
快速学习阿里云 FaaS (FPGA as a Service) 舜天平台合作探讨
121 0
阿里云 FaaS (FPGA as a Service) 舜天平台合作探讨|学习笔记
|
人工智能 编解码 算法
阿里云 FaaS(FPGA as a Service)舜天平台解决方案(二)|学习笔记
快速学习阿里云 FaaS(FPGA as a Service)舜天平台解决方案(二)
223 0
阿里云 FaaS(FPGA as a Service)舜天平台解决方案(二)|学习笔记
|
存储 编解码 人工智能
阿里云 FaaS(FPGA as a Service)舜天平台解决方案(一)|学习笔记
快速学习阿里云 FaaS(FPGA as a Service)舜天平台解决方案(一)
226 0
阿里云 FaaS(FPGA as a Service)舜天平台解决方案(一)|学习笔记
|
前端开发 JavaScript API
微前端之Single SPA 与相关生态
微前端之Single SPA 与相关生态
224 0
|
自然语言处理 数据可视化 JavaScript
DM 平台管理 - netcore
项目简介: DLVM 是一个集数据库、逻辑、视图及模型为一体的并涵盖了常用基础套件,以 NetCore 为主的底层框架。具备安全性、可扩展性、可配置性及可视化操作等优点,并且具有一键创建模块的功能。
163 0
DM 平台管理 - netcore
|
开发框架 安全 数据可视化
DM平台netcore开源管理平台项目
软件简介 DLVM 是一个集数据库、逻辑、视图及模型为一体的并涵盖了常用基础套件,以 NetCore 为主的底层框架。具备安全性、可扩展性、可配置性及可视化操作等优点,并且具有一键创建模块的功能。
392 1
DM平台netcore开源管理平台项目
|
数据可视化 数据库连接 Linux
基于 netcore/DM 平台管理
DLVM 是一个集数据库、逻辑、视图及模型为一体的并涵盖了常用基础套件,以 NetCore 为主的底层框架。具备安全性、可扩展性、可配置性及可视化操作等优点,并且具有一键创建模块的功能。
130 0
基于 netcore/DM 平台管理