首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试着理解杯比微EventAggregator

试着理解杯比微EventAggregator
EN

Stack Overflow用户
提问于 2017-08-08 22:05:47
回答 2查看 1.8K关注 0票数 2

我理解EventAggregator在卡利伯恩公司是如何工作的,但我不明白这一点:

让我们以这个为例:

ViewModel A

代码语言:javascript
复制
private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
   _eventAggregator = eventAggregator
   _eventAggregator.PublishOnUIThread("Hello");
}

ViewModel B

代码语言:javascript
复制
private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
   _eventAggregator = eventAggregator
   _eventAggregator.Subscribe(this)
}
public void Handle(string message)
{ 
   MessageBox.Show(message + " From ViewModel B")
}

ViewModel C

代码语言:javascript
复制
private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
   _eventAggregator = eventAggregator
   _eventAggregator.Subscribe(this)
}
public void Handle(string message)
{ 
   MessageBox.Show(message + " From ViewModel C")
}

那么,在发布事件时,如何选择要使用的视图模型句柄呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-09 08:36:07

那么,在发布事件时,如何选择要使用的视图模型句柄呢?

几个视图模型可能订阅相同的消息。这就是事件聚合的工作方式。发布者发布一条消息,而不知道接收者的数量。

如果您希望特定的视图模型能够订阅一个事件,那么它应该实现IHandle<T>接口,并在事件聚合器上调用Subscribe方法:

代码语言:javascript
复制
public class ViewModelA : IHandle<string>
{
    private readonly IEventAggregator _eventAggregator;

    public ViewModelA(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe(this);
    }

    public void Handle(string message)
    {
        MessageBox.Show(message);
    }
}

所有这样做的视图模型都将收到消息。

票数 1
EN

Stack Overflow用户

发布于 2020-04-24 20:31:21

我设法通过Message类向特定的视图模型发送消息:

代码语言:javascript
复制
public class Message<TTarget, TValue>
{
    public TValue Value { get; set; }

    public Message(TValue value)
    {
        Value = value;
    }
}

然后添加到类中。

代码语言:javascript
复制
IHandle<Message<ViewModel, string>>

用法:

代码语言:javascript
复制
_eventAggregator.PublishOnUIThread(new Message<ViewModel, string>("Hello from ViewModel"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45578745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档