Просто для подробного описания использования IEventAggregator
- он дает вам простую модель Pub / Sub для отправки произвольных сообщений между отделенными (т.е. ни одна из них не должна ничего знать о других) частях приложения.Таким образом, мы можем получить ссылку на IEventAggregator
в нашем конструкторе ViewModel (это автоматически разрешается для вас платформой), то есть:
private IEventAggregator eventAggregator;
public PublisherViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
Затем в нашем измененном обработчике выбора мы можем опубликовать событие:
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Publish(selectedItemId);
Это зависит от нашего пользовательского класса событий MyListboxChangedEvent
:
public class MyListboxChangedEvent : CompositePresentationEvent<int> {}
Итак, наконец, во ViewModel, который отвечает на это действие, мы настроили подписку на событие,и соответствующий метод-обработчик:
public SubscriberViewModel(IEventAggregator eventAggregator)
{
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Subscribe(OnListBoxChanged, ThreadOption.UIThread);
}
public void OnListBoxChanged(int selectionId)
{
// do whatever we need
}
Кажется, что это много клея, но он становится логическим методом для соединения различных частей пользовательского интерфейса и довольно быстро становится второй натурой.