gpt4 book ai didi

c# - 试图了解 Caliburn Micro EventAggregator

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:44 24 4
gpt4 key购买 nike

我了解 EventAggregator 在 Caliburn Micro 中是如何工作的,但我不明白这一点:

我们以此为例:

View 模型 A

private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator
_eventAggregator.PublishOnUIThread("Hello");
}

ViewModel B

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

private IEventAggregator _eventAggregator;
public ViewModelA(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator
_eventAggregator.Subscribe(this)
}
public void Handle(string message)
{
MessageBox.Show(message + " From ViewModel C")
}

那么当我发布事件时,如何选择要使用的 View 模型句柄?

最佳答案

So how can i select which viewmodel handle to use when i publish events?

多个 View 模型可以订阅相同的消息。这就是事件聚合的工作原理。发布者在不知道接收者数量的情况下发布一条消息。

如果你想让一个特定的 View 模型能够订阅一个事件,它应该实现 IHandle<T>接口(interface)并调用 Subscribe事件聚合器上的方法:

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);
}
}

执行此操作的所有 View 模型都会收到消息。

关于c# - 试图了解 Caliburn Micro EventAggregator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com