Создаю свое первое приложение MVVM, и оно знакомит с некоторыми действительно мощными концепциями, но в то же время нужно многому научиться сразу. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что подписчики событий, похоже, не получают события, когда я публикую их из другой ViewModel.
Я думаю, мне нужно new
создать EventAggregator в App.xaml.cs или в моем классе BootStrapper
, а затем внедрить этот экземпляр в каждую ViewModel, которая должна на него ссылаться. Я думаю, что происходит то, что для каждой модели представления создается новый IEventAggregator
, и я публикую/подписываюсь на разные экземпляры. Не уверен, связано ли мое отключение с шаблоном/призмой EventAggregator или DI/Autofac.
Должен ли я сделать что-то вроде этого:
public partial class App : Application
{
//Add this...
IEventAggregator eventAggregator = new EventAggregator();
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//... and pass in here somehow?
var window = new BootStrapper()
.Bootstrap()
.Resolve<AView>();
window.Show();
}
}
Или вот так:
public class BootStrapper
{
//Add this...
IEventAggregator eventAggregator = new EventAggregator();
public IContainer Bootstrap()
{
var builder = new ContainerBuilder();
builder.RegisterType<AView>()
.AsSelf();
builder.RegisterType<AViewModel>()
.AsSelf();
builder.RegisterType<OtherViewModel>()
.As<IOtherViewModel>();
builder.RegisterType<ADataProvider>()
.As<IADataProvider>();
builder.RegisterType<ADataService>()
.As<IDataService<Account>>();
//What I'm doing now
builder.RegisterType<EventAggregator>()
.As<IEventAggregator>();
//...and register instance here?
builder.RegisterType<AccountSelectedEvent>()
.AsSelf();
return builder.Build();
}
Советы, ссылки или подталкивание в правильном направлении одинаково ценятся. Спасибо!