C# Prism wfh将实体传递到模态视图的模态

C# Prism wfh将实体传递到模态视图的模态,c#,mvvm,prism,C#,Mvvm,Prism,我将MVVM模式与Prism2.0框架和WPF结合使用。我在模式窗口和使用事件初始化ViewModel时遇到问题。在我的模块中,我有一些代码创建了一个对象,然后我想将其传递到我的ViewModel中,以便视图可以绑定到它的属性 通常,我会使用EventAggregator发布一个事件,其中包含可以在ViewModel中订阅的对象。但是在这个场景中,我正在创建一个新的模式窗口,因此在发布事件之前,没有及时创建ViewModel来订阅事件。我试图避免将对象作为DataContext传递到窗口中或还原

我将MVVM模式与Prism2.0框架和WPF结合使用。我在模式窗口和使用事件初始化ViewModel时遇到问题。在我的模块中,我有一些代码创建了一个对象,然后我想将其传递到我的ViewModel中,以便视图可以绑定到它的属性

通常,我会使用EventAggregator发布一个事件,其中包含可以在ViewModel中订阅的对象。但是在这个场景中,我正在创建一个新的模式窗口,因此在发布事件之前,没有及时创建ViewModel来订阅事件。我试图避免将对象作为DataContext传递到窗口中或还原到其他机制。有人有办法让它工作吗?可能是在调用ShowDialog或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();
var popup=new PopUpWindow();
regionManager.RegisterViewWithRegion(“MyRegion”,typeof(MyView));
eventAggregator.GetEvent().Publish(myObject);
//ViewModel仅在运行下一行时创建并订阅事件
popup.ShowDialog();
我的方法如下,但我想知道是否有一个更优雅的解决方案我错过了

    var popup= new PopUpWindow();
    regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
    popup.Show();
    popup.Hide();
    eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
    popup.ShowDialog();
var popup=new PopUpWindow();
regionManager.RegisterViewWithRegion(“MyRegion”,typeof(MyView));
popup.Show();
popup.Hide();
eventAggregator.GetEvent().Publish(myObject);
popup.ShowDialog();

好吧,也许我已经弄明白了,似乎至少起作用了

    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();
var popup=new PopUpWindow();
regionManager.RegisterViewWithRegion(“MyRegion”,typeof(MyView));
RegionManager.SetRegionManager(弹出窗口,RegionManager);
regionManager.AddToRegion(“MyRegion”,typeof(MyView));
eventAggregator.GetEvent().Publish(myObject);
popup.ShowDialog();

您可以使用类似于Ade Miller的缓存事件聚合器的东西。此链接来自2008年,但仍应有用:

其思想是发布事件,如果没有订阅者,则将其存储到第一个订阅者出现为止

我希望这有帮助

谢谢,
Damian

有趣的是,我自己也曾想过要实现类似的功能,但后来决定放弃。好建议。