Я работаю в следующем учебнике http://www.mindscapehq.com/blog/index.php/2012/2/1/caliburn-micro-part-4-the-event-aggregator/ , и я сейчас застрял в части публикации/подписания.Caliburn Micro опубликуйте/подпишитесь
У меня все настроено, так что оно должно фактически публиковать события, но подписанная viewmodel не получает сообщение.
Я сделал следующее:
Publishing ViewModel:
[Export(typeof(ColorViewModel))]
public class ColorViewModel : PropertyChangedBase
{
private readonly IEventAggregator events;
[ImportingConstructor]
public ColorViewModel(IEventAggregator events)
{
this.events = events;
}
public void Red()
{
this.events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Red)));
}
public void Green()
{
this.events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Green)));
}
public void Blue()
{
this.events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Blue)));
}
}
Подписавшись ViewModel:
[Export(typeof(AppViewModel))]
public class AppViewModel : PropertyChangedBase, IAppViewModel, IHandle<ColorEvent>
{
private IEventAggregator events;
[ImportingConstructor]
public AppViewModel(ColorViewModel colorViewModel, IEventAggregator events)
{
this.ColorViewModel = colorViewModel;
this.events = events;
this.events.Subscribe(this);
}
public ColorViewModel ColorViewModel { get; private set; }
private SolidColorBrush color;
public SolidColorBrush Color
{
get
{
return this.color;
}
set
{
this.color = value;
this.NotifyOfPropertyChange(() => this.Color);
}
}
public void Handle(ColorEvent message)
{
this.Color = message.Color;
}
}
Есть 3 радио кнопки на ColorView, которые я могу нажать и я войдите в методы Red(), Green(), Blue(), чтобы вызывается PublishOnUIThread. Но я никогда не достигаю метода Handle (ColorEvent) AppViewModel.
Я пропустил что-то или почему мой метод обработки не вызван после публикации ColorEvents?
Заранее спасибо
Откуда возникает агрегатор событий? Это тот же самый экземпляр, который разделяет между AppViewModel и ColorViewModel? –
Привет, Джек, спасибо за ваш комментарий. Агрегатор событий инжектируется Ninject, так что да, он должен быть одинаковым в обеих моделях просмотра. – xeraphim
Это агрегатор событий, зарегистрированный как одноэлементный или любой другой эквивалент в Ninject? –