Prism 四事件聚合器

#1024程序员节|征文#

不废话,直接上代码一个简单的示例。

1、事件聚合

创建一个文件夹EventBLL,添加EventDemo.cs,代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApp1.EventBLL
{
    public class EventDemo :PubSubEvent<string>
    {

    }
}

MainWindowViewModel.cs代码如下。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using WpfApp1.EventBLL;

namespace WpfApp1.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private string _mvvmString = "Hello Prism";

        public string MVVMString
        {
            get { return _mvvmString; }
            set { SetProperty(ref _mvvmString, value); }
        }

        private IEventAggregator _eventAggregator;
        public MainWindowViewModel(IEventAggregator ea)
        {
            _eventAggregator = ea;
            _eventAggregator.GetEvent<EventDemo>().Subscribe(GetEvent);
        }
        private void GetEvent(string str)
        {
            MVVMString = "接收到:" + str;
        }

        private DelegateCommand _EventPublishCommand;
        public DelegateCommand EventPublishCommand
        {
            get { return _EventPublishCommand = new DelegateCommand(EventPublish); }
        }
        private void EventPublish()
        {
            _eventAggregator.GetEvent<EventDemo>().Publish("123");
        }
    }
}

MainWindow.xaml 修改代码如下。

<Window x:Class="WpfApp1.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <TextBlock Text="{Binding MVVMString}" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        <Button Content="发布" Command="{Binding EventPublishCommand}" Width="200" Height="30" HorizontalAlignment="Center" Margin="0,0,0,5"/>
    </StackPanel>
</Window>

运行效果如下图。

 2、订阅过滤

ThreadOption:下列选择可供选择。
    PublisherThread: 使用此设置接收发布者线程上的事件。这是默认设置。
    BackgroundThread: 使用此设置异步接收A上的事件。网框架线池线。
    UIThread: 使用此设置接收UI线程上的事件。

运行效果如图,通过下图可以看出当发布的是123是能够接收到。当发布的内容是23时没有接收到。这是因为订阅中过滤了不包含1的消息。

 MainWindow.xaml代码如下。

<Window x:Class="WpfApp1.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <TextBlock Text="{Binding MVVMString}" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        <TextBox x:Name="tbMessage" HorizontalAlignment="Center" Width="200" Height="30"/>
        <Button Content="发布" Command="{Binding EventPublishCommand}" CommandParameter="{Binding ElementName=tbMessage,Path=Text}" Width="200" Height="30" HorizontalAlignment="Center" Margin="0,0,0,5"/>
    </StackPanel>
</Window>

 MainWindowViewModel.cs代码如下。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using WpfApp1.EventBLL;

namespace WpfApp1.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private string _mvvmString = "Hello Prism";

        public string MVVMString
        {
            get { return _mvvmString; }
            set { SetProperty(ref _mvvmString, value); }
        }

        private IEventAggregator _eventAggregator;
        public MainWindowViewModel(IEventAggregator ea)
        {
            _eventAggregator = ea;
            _eventAggregator.GetEvent<EventDemo>().Subscribe(GetEvent,ThreadOption.UIThread,false,(filter)=>filter.Contains("1"));
        }
        private void GetEvent(string str)
        {
            MVVMString = "接收到:" + str;
        }

        private DelegateCommand<string> _EventPublishCommand;
        public DelegateCommand<string> EventPublishCommand
        {
            get { return _EventPublishCommand = new DelegateCommand<string>(EventPublish); }
        }
        private void EventPublish(string str)
        {
            _eventAggregator.GetEvent<EventDemo>().Publish(str);
        }
    }
}

可以看到(filter)=>filter.Contains("1"),在这里对订阅进行了过滤,只有包含1的内容才能被接收到。

keepSubscriberReferenceAlive 参数是类型bool :

true ,事件实例保持对订阅实例的强引用,从而不允许它获得垃圾收集。
false(当此参数省略时的默认值),事件对订阅服务器实例保持弱引用,从而允许垃圾收集器在没有其他引用时处理订阅服务器实例。当收集订阅者实例时,事件将自动取消订阅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC6-SpringMVC的视图

目录 ThymeleafView 转发视图 重定向视图 视图控制器view-controller SpringMVC中的视图是View接口&#xff0c;视图的作用&#xff1a;渲染数据&#xff0c;将模型Model中的数据展示给用户 SpringMVC视图的种类很多&#xff0c;默认有转发视图InternalResourceView 和重定…

卷积神经网络评价指标

1.评价指标的作用 1. 性能评估&#xff1a;评价指标提供了一种量化的方式来衡量CNN模型的性能。通过这些指标&#xff0c;我们可以了解模型在特定任务上的表现&#xff0c;比如图像分类、目标检测或图像分割等。 2. 模型比较&#xff1a;不同的模型架构或训练策略可能会产生不…

UWA Gears:Frame Capture模式 - 着色器查看器

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台&#xff0c;提供了实时监测和截帧分析功能&#xff0c;帮助您精准定位性能热点&#xff0c;提升应用的整体表现。 在上周的文章中&#xff0c;我们详细介绍了网格查看器的功能&#xff0c;介绍如何通过网格数据优化…

Deepin V23 / 统信UOS 下安装与配置 tftp

几个月前&#xff0c;我将开发系统从 ubuntu 切换到 Deepin&#xff0c;当时写过一篇文章《使用国产操作系统作为开发系统》。几个月下来&#xff0c;没有感觉有什么不适应&#xff0c;Ubuntu 能做的事情&#xff0c;在 Deepin 上都能做。而且有 UOS 应用商店的加持&#xff0c…

Linux: Shell编程入门

Shell 编程入门 1 ) Shell 概念 shell 是 在英语中 壳, 外壳的意思可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言不像C语言, C 或 Java 等编程语言那么完整&#xff0c;它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等&#xff0c;我们同样…

数学之三角函数

小时候总是听别人讲甚么三角函数&#xff0c;感觉十分高大上&#xff0c;像是很深奥的知识。 今天我来讲解一下三角函数&#xff0c;首先就是概念了。 三角函数的概念&#xff08;初中&#xff09;&#xff08;入门难度&#xff09; 三角函数顾名思义就属于函数。那么它和三角…

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25

51单片机快速入门之 AD(模数) DA(数模) 转换 2024/10/25 声明:本文图片来源于网络 A模拟信号特点: 电压或者电流 缓慢上升 随着时间连续缓慢上升或下降 D数字信号特点:电压或者电流 保持一段时间的高/低电平 状态 / 突变 (高电压瞬间低电压) 数字电路中 通常将0-1v电压称…

JavaScript高级特性速成指南:原型链、严格模式、高阶函数、闭包、递归、浅拷贝和深拷贝

如果生活中有什么使你感到快乐&#xff0c;那就去做吧&#xff0c;不要管别人说什么 文章目录 原型链严格模式高阶函数闭包递归浅拷贝和深拷贝 原型链 概念&#xff1a;就是串联起来的结构作用&#xff1a;提供一个成员的查找机制或者查找规则 Javascript的成员查找机制(规则)…

resources下lib文件中的jar包怎么添加到git

这里讲怎么处理这部分的问题&#xff1a; 1&#xff1a;java maven resource 目录下的jar无法被添加到git 2&#xff1a;使用git命令添加jar包时报错&#xff1a;The following paths are ignored by one of your .gitignore files: ***&#xff0c;use -if **** 上面都是相同…

SpringMVC实战:构建高效表述层框架

文章目录 1. SpringMVC简介和体验1.1 介绍1.2 主要作用1.3 核心组件和调用流程1.4 快速体验 2. SpringMVC接收数据2.1 访问路径设置2.2 接收参数2.2.1 param和json参数比较2.2.2 param参数接收2.2.3 路径参数接收2.2.4 json参数接收 2.3 接收cookie数据2.4 接收请求头数据2.5 原…

Spring Boot技术中小企业设备管理系统设计与实践

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

SpringBoot启动报错java.nio.charset.MalformedInputException: Input length =1

启动springboot项目时&#xff0c;出现了以下报错&#xff1a; defaultPattern_IS_UNDEFINEDdefaultPattern_IS_UNDEFINEDdefaultPattern_IS_UNDEFINEDjava.lang.IllegalStateException: Failed to load property source from location classpath:/application-local.yamlat o…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中&#xff0c;特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展&#xff0c;一方面&#xff0c;其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

【Sublime Text】设置中文 最新最详细

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Sublime Text】设置中文 最新最详细 开…

【Git】将本地代码提交到github仓库

一、创建仓库 复制这里的HTTP连接码 二、仓库初始化 进入你要提交的代码文件夹 右键选择 Git Bach Here 输入命令 git clone [HTTP连接码] 此时文件夹里会出现一个新的文件夹&#xff0c;将原来的文件当今这个新的文件夹 三、上传代码 执行命令 cd [新文件夹] 将所有文件放…

蓝牙技术的多种模式详解

蓝牙作为一种广泛应用的无线通信技术&#xff0c;已经在我们的日常生活中无处不在。随着技术的发展&#xff0c;蓝牙已经不再仅限于传统的音频传输&#xff0c;而是扩展到了各种应用领域。本文将深入探讨蓝牙的各种模式及其应用场景。 1. 经典蓝牙&#xff08;BR/EDR&#xff…

重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)

栈和队列 C语言中的栈和队列总结 在C语言中&#xff0c;**栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;**是两种非常重要的数据结构。它们广泛用于各种应用中&#xff0c;比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介…

从零开始的Go语言之旅(2 Go by Example: Values)

Go 语言有多种值类型&#xff0c;包括字符串、整数、浮点数、布尔值等。以下是一些基本示例。 package mainimport "fmt"func main() {fmt.Println("go" "lang")fmt.Println("11 ", 11)fmt.Println("7.0/3.0 ", 7.0/3.0)f…

深度学习——线性神经网络(五、图像分类数据集——Fashion-MNIST数据集)

目录 5.1 读取数据集5.2 读取小批量5.3 整合所有组件 MNIST数据集是图像分类中广泛使用的数据集之一&#xff0c;但是作为基准数据集过于简单&#xff0c;在本小节将使用类似但更复杂的Fashion-MNIST数据集。 import torch import torchvision from torch.utils import data fr…

你了解的spring框架有哪些

列举一些重要的Spring模块&#xff1f; Spring Core&#xff1a; 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IOC 依赖注入功能。**Spring Aspects ** &#xff1a; 该模块为与AspectJ的集成提供支持。Spring AOP &#xff1a;提供了面向方面的编程实现。…