【发布时间】: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 事件中的视图,它似乎删除了它们,但是对话框仍然不会重新打开,并出现无法创建视图的错误。
如何使用自己的作用域区域管理器正确打开一个新的对话窗口,以便我可以关闭它并重新打开它?
【问题讨论】:
-
是否需要其他信息?