这次是事件聚合器的应用。

事件聚合器应用第一步:定义一个事件聚合器,应该是一个可访问的公共区域,例14为它做了一个core的项目。代码很简单:

using Prism.Events;

namespace UsingEventAggregator.Core
{
public class MessageSentEvent : PubSubEvent<string>
{
}
}

一个继承了PubSubEvent<T>的空类,T的内容可以很多……

ModuleA定义了一个消息发送界面。

 <StackPanel>
<TextBox Text="{Binding Message}" Margin="5"/>
<Button Command="{Binding SendMessageCommand}" Content="Send Message" Margin="5"/>
</StackPanel>

对应VM中定义了发送命令

 1 public class MessageViewModel : BindableBase
2 {
3 IEventAggregator _ea;
4
5 private string _message = "Message to Send";
6 public string Message
7 {
8 get { return _message; }
9 set { SetProperty(ref _message, value); }
10 }
11
12 public DelegateCommand SendMessageCommand { get; private set; }
13
14 public MessageViewModel(IEventAggregator ea)
15 {
16 _ea = ea;
17 SendMessageCommand = new DelegateCommand(SendMessage);
18 }
19
20 private void SendMessage()
21 {
22 _ea.GetEvent<MessageSentEvent>().Publish(Message);
23 }
24 }

首先注入事件聚合器,然后在点击按钮的时候,让聚合器发布文本框内的内容。

然后看一下ModuleB怎样接收消息

界面:

 <Grid>
<ListBox ItemsSource="{Binding Messages}" />
</Grid>

一个列表框。

接收消息的逻辑

 public class MessageListViewModel : BindableBase
{
readonly IEventAggregator _ea; private ObservableCollection<string> _messages;
public ObservableCollection<string> Messages
{
get => _messages;
set => SetProperty(ref _messages, value);
} public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection<string>(); _ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived);
} private void MessageReceived(string message)
{
Messages.Add(message);
}
}

仍然是注入聚合器,然后在收到消息后,将消息加入到队列。

Prism Sample 14-UsingEventAggregator的更多相关文章

  1. 五、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之MVVM中的EventAggregator

    这一篇我们主要再看完示例12.13后,写了个例子,用于再Modules下执行ApplicationCommands,使用IActiveAware执行当前View的Commands,或者Applicat ...

  2. Android 主题动态切换框架:Prism

    Prism(棱镜) 是一个全新的 Android 动态主题切换框架,虽然是头一次发布,但它所具备的基础功能已经足够强大了!本文介绍了 Prism 的各种用法,希望对你会有所帮助,你也可以对它进行扩展, ...

  3. 从PRISM开始学WPF(六)MVVM(三)事件聚合器EventAggregator?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  4. [转]Blue Prism Architecture

    本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...

  5. 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator-更新至Prism7.1

    原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator-更新至Prism7.1 事件聚合器EventAggregator [7.1updated]除了app部分,没 ...

  6. 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?

    原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WP ...

  7. C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

    --概述 这个项目演示了如何在WPF中使用各种Prism功能的示例.如果您刚刚开始使用Prism,建议您从第一个示例开始,按顺序从列表中开始.每个示例都基于前一个示例的概念. 此项目平台框架:.NET ...

  8. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...

  9. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

    在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 Spri ...

  10. HiBench成长笔记——(9) 分析源码monitor.py

    monitor.py 是主监控程序,将监控数据写入日志,并统计监控数据生成HTML统计展示页面: #!/usr/bin/env python2 # Licensed to the Apache Sof ...

随机推荐

  1. Sqoop连接数据库MySQL报错

    1.问题描述 (1)问题示例: [Hadoop@master TestDir]$ sqoop list-databases --connect jdbc:mysql://master:3306/ -- ...

  2. mysql-单行处理函数

    1 单行处理函数 lower() 对于输出转换成小写 upper()对于输出转换成大写 substr()取子字符串 下标从1开始 length() 去长度 concat()将字符串进行拼接 例:将首字 ...

  3. kettle连接oracle

    连接oracle 10g 驱动classes12.jar 配置一下三项即可: 1.数据库名称:ip:端口/实例 2.用户名 3.密码

  4. 微信小程序中如何设置跳转页面

    修改project.config.json内容 "cloudfunctionRoot":"cloud", //配置云开发的路径 更改app.js文件内容 App ...

  5. NodeJs 版本管理

    nvm-windows 说明:nvm是Nodejs的版本管理器.在开发中项目可能需要低版本或者高版本的Nodejs运行环境,以此我们可以使用nvm来切换Nodejs的版本. 在安装NVM for Wi ...

  6. Android笔记--案例:登录界面以及登录逻辑

    登录界面的实现 就是说,界面的绘制,并没有什么难度,只要控制好空间的分配就可以了 登录的逻辑实现 获取验证码.忘记密码的界面跳转.登录的实现: 确认文本框的输入内容是否符合题意:

  7. 快收藏!最全GO语言实现设计模式

    https://segmentfault.com/a/1190000042859564

  8. [ACM]TL-Prim

    #include<iostream> #include<cstdio> using namespace std; int main(){ int inf = 99999999; ...

  9. 图与网络分析—R实现(五)

    四 最大流问题 最大流问题(maximum flow problem),一种网络最优化问题,就是要讨论如何充分利用装置的能力,使得运输的流量最大,以取得最好的效果.最大流问题是一类应用极为广泛的问题, ...

  10. [Shell] Windows上支持Linux Shell的工具/方法

    0 概述 1 方式一 : Windows Terminal 局限性: 不支持 xargs等命令 支持sed,find等命令 安装方式 安装Windows Terminal的最简单方法是通过Micros ...