Prism Sample 14-UsingEventAggregator

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

事件聚合器应用第一步:定义一个事件聚合器,应该是一个可访问的公共区域,例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 9 ChangeConvention


下一篇:WPF Step By Step 系列5-Prism框架在项目中使用