Hi guys,
I'm using the MVVM pattern with Prism 2.0 framework and WPF. I've run into a problem with a modal Window and initializing a ViewModel using Events. In my module I have some code that creates an object which I then want to pass this into my ViewModel so that the View can bind to it's properties.
Normally I'd use the EventAggregator to publish an event containing my object that can be be subscribed to in the ViewModel. However in this scenario I'm creating a new modal Window and therefore the ViewModel is not created in time to subscribe to the event before I can publish it. I'm trying to avoid passing the object in to the Window as DataContext or reverting to other mechanisms. Does anyone have a solution to get this working? Maybe some way of forcing the View to load before a call to ShowDialog or Show?
var popup= new PopUpWindow();
regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
// ViewModel only created and subscribes to event when the line below is run
popup.ShowDialog();
My hack to make this work is as follows, but I'm wondering if there's a more elegant solution I'm missing?
var popup= new PopUpWindow();
regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
popup.Show();
popup.Hide();
eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
popup.ShowDialog();
Ok maybe I've figured it out, seems to work at least...
var popup= new PopUpWindow();
regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
RegionManager.SetRegionManager(popup, regionManager);
regionManager.AddToRegion("MyRegion", typeof(MyView));
eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
popup.ShowDialog();