首页 > 其他分享 >WPF Prism PubSubEvent(订阅)

WPF Prism PubSubEvent(订阅)

时间:2024-07-03 17:12:40浏览次数:18  
标签:eventAggregator PubSubEvent regionManager private Prism GetEvent WPF public

Prism 提供了事件聚合器(Event Aggregator)来实现事件的订阅和发布,允许模块之间进行松耦合的通信。

主要作用:

  • 解耦合:通过事件订阅和发布,模块之间可以实现解耦合,避免直接依赖于彼此的实现细节。

示例用法:

  1. 定义事件类
public class MessageEvent : PubSubEvent<string> { }
  1. 订阅事件
eventAggregator.GetEvent<MessageEvent>().Subscribe(OnMessageEventReceived);
  1. 处理事件
private void OnMessageEventReceived(string message)
{
    // 处理接收到的事件
}
  1. 发布事件
eventAggregator.GetEvent<MessageEvent>().Publish("Hello, Prism!");
  1. 解约事件
eventAggregator.GetEvent<MessageEvent>().Unsubscribe(OnMessageEventReceived);

 

示例实现如下:示例下载 PrismCore.zip

第一步、创建订阅

public class MessageEvent : PubSubEvent<string>
{
}

 

第二步:创建区域接收消息
public partial class EventControl : UserControl
{
    public EventControl(IEventAggregator eventAggregator)
    {
        InitializeComponent();
        eventAggregator.GetEvent<MessageEvent>().Subscribe(arg =>
        {
            MessageBox.Show($"接收到消息:{arg}");
        });
    }
}

第三步:MVVM发送消息

public class MainWindowViewModel : BindableBase
{
    private readonly IEventAggregator agregator;
    private readonly IRegionManager regionManager;
    public DelegateCommand EventCommand { private set; get; }
    public MainWindowViewModel(IRegionManager _regionManager, IEventAggregator _eventAggregator)
    {
        EventCommand = new DelegateCommand(ExecuteEventCommand);
        _regionManager.RegisterViewWithRegion("EventRegion", typeof(Regions.EventControl));
        regionManager = _regionManager;
        eventAggregator= _eventAggregator;
    }
    private void ExecuteEventCommand()
    {
        eventAggregator.GetEvent<MessageEvent>().Publish("Hello, Prism!");
    }
}

 

第四步:XAML 代码
<ContentControl Grid.Row="2" prism:RegionManager.RegionName="EventRegion"/>

<Button Content="发送订阅消息" Width="120" Margin="50 0">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <i:InvokeCommandAction Command="{Binding EventCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

 

标签:eventAggregator,PubSubEvent,regionManager,private,Prism,GetEvent,WPF,public
From: https://www.cnblogs.com/microsoft-zh/p/18282170

相关文章

  • WPF进度条中间写百分比数字
    我发现很多同学把思维固话了,通常我们需要实现的进度条是我在网上看到好多例子,但是都没有我的简单,他们不是重写ProcessBar就是使用模板,可以将TextBlock提取出来啊,灵活一点单独绑定然后一句代码Panel.ZIndex="1"就搞定了<StackPanel><ButtonContent="执行耗时......
  • DevExpress WPF中文教程:Grid - 如何显示摘要(设计时)?
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • WPF Image scalertransform translatetransform mvvm,custom delegate command Comman
    //xaml<Windowx:Class="WpfApp187.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • Prism 7.0+ Region(区域)
    创建区域模块:MainWindow.xaml调用区域模块:<Grid><Grid.RowDefinitions><RowDefinitionHeight="28"/><RowDefinitionHeight="*"/><RowDefinitionHeight="28"/></Grid.Row......
  • wpf关于Resource,Style的定义与引用,滑动按钮
    当我们使用wpf框架去搭建自己的程序时,一般都会重写wpf原生的一些样式,以达到软件风格的统一于美化,以下介绍一下常见的几种添加Style的方式我们以一个滑动按钮为例1.对当前控件的样式进行更改<ToggleButton><ToggleButton.Style><StyleTarg......
  • WPF 分隔栏分割窗体简单测试
    XAML:<Windowx:Class="WpfApp3.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.micro......
  • WPF 中 StackPanel 控件的可视化 Visibility.Collapsed 控件元素会自动前移
    XAML:<Grid><Grid.RowDefinitions><RowDefinition/><RowDefinitionHeight="Auto"/></Grid.RowDefinitions><StackPanelGrid.Row="0"><TextBoxx:Name="txb_001&quo......
  • 开发界的良心评测文章,告诉你WPF 与 WinForms 对比:性能、开发难度、特点及操作系统支持
    引言WindowsPresentationFoundation(WPF)和WindowsForms(WinForms)是微软提供的两种用于构建Windows桌面应用程序的框架。尽管它们都有助于开发高效的桌面应用程序,但在性能、开发难度、特点和操作系统支持方面存在显著差异。本文将详细比较WPF和WinForms,以帮助开发者选择......
  • 基于WPF+Halcon开发的机器视觉框架,参考easyvision开发
    基于WPF+Halcon开发的机器视觉框架,参考easyvision开发50多个模块,WPF+Halcon开发,是非常不错的学习框架,需要什么功能可以自己添加开发,插件式开发非常方便,代码开源可二次开发。整套源码,可学习参考,也可略做修改,用在自己的项目上。基于WPF+Halcon开发的机器视觉框架运行界面......
  • Simple WPF: WPF 透明窗体和鼠标事件穿透
    一个自定义WPF窗体的解决方案,借鉴了吕毅老师的WPF制作高性能的透明背景的异形窗口一文,并在此基础上增加了鼠标穿透的功能。可以使得透明窗体的鼠标事件穿透到下层,在下层窗体中响应。这个方法不一定是制作WPF透明窗体最合适的方法,请各路大大不要喷。完整代码地址:Github一、去除......