I understood how does EventAggregator work in Caliburn Micro but i don't understand this:
Let's take this as an example:
ViewModel 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")
}
So how can i select which viewmodel handle to use when i publish events?
So how can i select which viewmodel handle to use when i publish events?
Several view models may subscribe to the same message. This is how event aggregation works. The publisher publishes a single message without any knowledge of the number of receivers.
If you want a particular view model to be able to subscribe to an event, it should implement the IHandle<T>
intertface and call the Subscribe
method on the event aggregator:
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);
}
}
All view models that does this will receive the message.