C# PRISM MEF创建和使用新的RegionManager
我目前没有可用的代码,所以我会尽量描述 我有一个带菜单的shell窗口。该菜单有一个菜单项,用于打开一个新的模式对话框窗口,其中外壳窗口是其父窗口。我正在使用自定义交互请求和触发操作打开对话框窗口。自定义INotification事件的Content属性接受一个视图(在本例中是一个窗口控件),视图本身接受一个IRegionManager作为其构造函数C# PRISM MEF创建和使用新的RegionManager,c#,wpf,mvvm,prism,mef,C#,Wpf,Mvvm,Prism,Mef,我目前没有可用的代码,所以我会尽量描述 我有一个带菜单的shell窗口。该菜单有一个菜单项,用于打开一个新的模式对话框窗口,其中外壳窗口是其父窗口。我正在使用自定义交互请求和触发操作打开对话框窗口。自定义INotification事件的Content属性接受一个视图(在本例中是一个窗口控件),视图本身接受一个IRegionManager作为其构造函数 [Import] public IRegionManager { get; set; } ...{ Content = new DialogWi
[Import]
public IRegionManager { get; set; }
...{ Content = new DialogWindowView(regionManager.CreateRegionManager()) }
然后,当从Shell视图调用该操作时,它从Content属性获取对窗口的引用,并调用Content.ShowDialog()
然后在对话框窗口的构造函数中,我将一些视图添加到对话框窗口的区域中
public IRegionManager RegionManager { get; set; }
public DialogWindowView(IRegionManager regionManager)
{
this.RegionManager = regionManager;
RegionManager.RegisterViewWithRegion("region1", typeof(view1));
RegionManager.RegisterViewWithRegion("region2", typeof(view2));
RegionManager.RegisterViewWithRegion("region3", typeof(view3));
}
在对话框窗口的视图中,我将区域绑定到对话框窗口的区域管理器,如下所示:
<ContentControl
prism:RegionManager.RegionManager="{Binding RegionManager, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
prism:RegionManager.RegionName="region1"/>
对话框窗口加载并显示其区域中的视图,但当我关闭对话框窗口并再次尝试打开它时,它无法将视图添加到区域中,因为它们已经存在。我甚至不确定这是怎么可能的,因为每次我打开一个对话框时,我都会在对话框上调用new
(因此它应该是一个新的对话框),并且我会传入一个全新的区域经理(它应该没有与之相关联的视图)。我已尝试在windows关闭事件中手动删除视图,但似乎已将其删除,但对话框仍无法重新打开,错误是无法创建视图
如何使用自己的作用域管理器正确打开新的对话框窗口,以便关闭并重新打开它?我将视图发现更改为视图注入,并将将将视图添加到区域的代码从构造函数移动到加载的事件
RegionManager.Regions["region"].Add(ServiceLocator.Current.GetInstance<view>());
RegionManager.Regions[“region”].Add(ServiceLocator.Current.GetInstance());
如果不做更多的研究,我不能100%确定这两种方法之间的区别,但它现在起作用了,这让我很高兴。是否需要其他信息?