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

简介:

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

 本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/3440972.html,如需转载请自行联系原作者

相关文章
|
C#
wpf窗体定位
原文:wpf窗体定位 据WPF外包小编了解,通常,不需要在屏幕上明确定位窗口。而是简单地将WindowState属性设置为Normal,并忽略其他所有细节。另一方面,很少会将WindowStartupLocation属性设置为Manual,并使用Left属性和Right属性明确设置窗口的位置。
933 0
|
容器 C#
数据绑定(四)使用DataContext作为Binding的Source
原文:数据绑定(四)使用DataContext作为Binding的Source DataContext属性被定义在FrameworkElement类里,这个类是WPF控件的基类,这意味着所有WPF控件都具备这个属性,...
1151 0
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
558 17
|
11天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
909 109
|
5天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。