2016-12-25 4 views
1

Я пишу свой код в WPF, где у меня есть две модели просмотра. В одной модели представления, я закрываю призму всплывающее окно и на закрытии я называю свой метод публикации, как:Prism - Опубликовано событие не подписано

private void OnCancelInteraction() 
{ 
    _eventAggregator.GetEvent<PubSubEvent>().Publish(); 
    this.FinishInteraction(); 
} 

в то время как мои подписываться событие выглядит следующим образом:

public ResidentListViewModel(IResidentService residentService, IUserService userService, IEventAggregator eventAggregator) 
{ 
    var res = eventAggregator.GetEvent<PubSubEvent>().Subscribe(InitializeCollectionView); 
    _residentService = residentService; 
    _userService = userService; 
    _eventAggregator = eventAggregator; 
    InitializeCollectionView(); 

    //***The InteractionRequest class 
    FormDialogOpenRequest = new InteractionRequest<INotification>(); 
    ConfirmationRequest = new InteractionRequest<IConfirmation>(); 

     //*** Commands for each of the buttons 
    RaiseFormDialogOpenCommand = new DelegateCommand<object>(this.RaiseFormDialogOpen); 
    aiseConfirmationCommand = new DelegateCommand<object>(this.RaiseConfirmation); 
} 

Вот как и из этих классов получают агрегатор событий:

UnityContainer container = new UnityContainer(); 
var aggregator = container.Resolve<EventAggregator>(); 
this.DataContext = new ResidentFormDialogViewModel(residentService, userService, unitService, aggregator); 

вот мой второй класс:

UnityContainer container = new UnityContainer(); 
var aggregator = container.Resolve<EventAggregator>(); 
DataContext = new ResidentListViewModel(residentService, userService, aggregator); 

Каждый раз, когда я отменяю свое взаимодействие, публикация публикуется, но ResidentListViewModel не вызывается для подписки.

ResidentListViewModel вызывается перед другим классом, который имеет метод подписки. Это может быть проблема? Все, что я хочу, это инициализировать мой просмотр коллекции всякий раз, когда взаимодействие завершается без нарушения шаблона MVVM? Если есть какой-либо другой метод, пожалуйста, предложите.

ответ

1

Обязательно настройте объект _eventAggregator как Singleton и используйте этот единственный экземпляр в обеих моделях viewmodels. Проблема в вашем случае может быть связана с различными объектами EventAggregator, которые используются для публикации и подписания события.

+0

@NaveedZahoor Я вижу, что UnityContainer предоставляет 2 разных экземпляра EventAggregator для каждого класса. Вы должны настроить eventAggregator как singleton. –

+0

, например, вы можете использовать: container.RegisterType (новый ContainerControlledLifetimeManager()); Кроме того, вы можете использовать класс, предоставляющий вам одиночный экземпляр EventAggregator с помощью статического метода. –

+0

Да, вы были правы. благодаря –

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