【问题标题】:PRISM MEF Creating and using a new RegionManagerPRISM MEF 创建和使用新的 RegionManager
【发布时间】:2014-12-04 19:31:58
【问题描述】:

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

我有一个带有菜单的 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 事件中的视图,它似乎删除了它们,但是对话框仍然不会重新打开,并出现无法创建视图的错误。

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

【问题讨论】:

  • 是否需要其他信息?

标签: c# wpf mvvm prism mef


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2011-08-28
    • 2012-08-29
    相关资源
    最近更新 更多