Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PRISM MEF创建和使用新的RegionManager_C#_Wpf_Mvvm_Prism_Mef - Fatal编程技术网

C# PRISM MEF创建和使用新的RegionManager

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

我目前没有可用的代码,所以我会尽量描述

我有一个带菜单的shell窗口。该菜单有一个菜单项,用于打开一个新的模式对话框窗口,其中外壳窗口是其父窗口。我正在使用自定义交互请求和触发操作打开对话框窗口。自定义INotification事件的Content属性接受一个视图(在本例中是一个窗口控件),视图本身接受一个IRegionManager作为其构造函数

[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%确定这两种方法之间的区别,但它现在起作用了,这让我很高兴。

是否需要其他信息?