WPF Prism7.0+ IEventAggregator(订阅)

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>
{
}

 

第二步:创建区域接收消息
1
2
3
4
5
6
7
8
9
10
11
public partial class EventControl : UserControl
{
    public EventControl(IEventAggregator eventAggregator)
    {
        InitializeComponent();
        eventAggregator.GetEvent<MessageEvent>().Subscribe(arg =>
        {
            MessageBox.Show($"接收到消息:{arg}");
        });
    }
}

第三步:MVVM发送消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 代码
1
2
3
4
5
6
7
8
9
<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>

 

posted @   microsoft-zhcn  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-07-03 WPF MVVM之Visibility 属性绑定
点击右上角即可分享
微信分享提示