PRISM MEF创建和使用新的RegionManager

时间:2014-12-04 19:31:59

标签: c# wpf mvvm prism mef

我目前没有可用的代码,所以我会尝试尽可能具有描述性。

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

[Import]
public IRegionManager { get; set; }

...{ Content = new DialogWindowView(regionManager.CreateRegionManager()) }

然后,当从Shell视图调用Action时,它从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 Closing事件上的视图,它似乎删除它们,但然后对话框仍然不会重新打开,并显示无法创建视图的错误。

如何使用自己的作用域区域管理器正确打开一个新的对话框窗口,以便我可以关闭它并重新打开它?

1 个答案:

答案 0 :(得分:0)

我从视图发现更改为视图注入,并移动了将视图添加到从构造函数到加载事件的区域的代码。

RegionManager.Regions["region"].Add(ServiceLocator.Current.GetInstance<view>());

如果不做更多的研究,我不能100%确定这两种方法之间的区别,但它现在正在运作,所以这让我感到高兴。