2015-03-16 3 views
2

Я работаю в следующем учебнике 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?

Заранее спасибо

+0

Откуда возникает агрегатор событий? Это тот же самый экземпляр, который разделяет между AppViewModel и ColorViewModel? –

+0

Привет, Джек, спасибо за ваш комментарий. Агрегатор событий инжектируется Ninject, так что да, он должен быть одинаковым в обеих моделях просмотра. – xeraphim

+0

Это агрегатор событий, зарегистрированный как одноэлементный или любой другой эквивалент в Ninject? –

ответ

2

Где агрегатор событие приходит? Является ли тот же самый экземпляр разделяемым между AppViewModel и ColorViewModel?

Является ли агрегатор событий зарегистрированным в виде одноэлементного или любого другого эквивалента в Ninject?

Смежные вопросы