Я пишу свой код в 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? Если есть какой-либо другой метод, пожалуйста, предложите.
@NaveedZahoor Я вижу, что UnityContainer предоставляет 2 разных экземпляра EventAggregator для каждого класса. Вы должны настроить eventAggregator как singleton. –
, например, вы можете использовать: container.RegisterType (новый ContainerControlledLifetimeManager()); Кроме того, вы можете использовать класс, предоставляющий вам одиночный экземпляр EventAggregator с помощью статического метода. –
Да, вы были правы. благодаря –