2011-04-04 86 views
4

如何从棱镜区域卸载视图?棱镜4:从区域卸载视图?

我正在写一个带有Ribbon控件的WPF Prism应用程序。功能区的“主页”选项卡包含一个区域RibbonHomeTabRegion,其中一个模块(称为ModuleA)加载了一个RibbonGroup。这工作正常。

当用户离开ModuleA时,需要从RibbonHomeTabRegion中卸载RibbonGroup。我不会用另一种观点取代RibbonGroup - 该地区应该是空的。

编辑:我已经重写了这部分的质询:“该区域不包含指定视图”

当我尝试删除的观点,我得到一个错误信息所以,我写了下面的代码删除任何观点是在该地区:

// Get the regions views 
var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
var ribbonHomeTabRegion = regionManager.Regions["RibbonHomeTabRegion"]; 
var views = ribbonHomeTabRegion.Views; 

// Unload the views 
foreach (var view in views) 
{ 
    ribbonHomeTabRegion.Remove(view); 
} 

我仍然得到同样的错误,告诉我有一些非常基本的,我做不正确。

任何人都可以指向正确的方向吗?谢谢你的帮助。

回答

4

我找到了我的答案,但我不能说我完全理解它。我用了IRegionManager.RequestNavigate()到RibbonGroup注入到功能区的主页选项卡,如下所示:

// Load RibbonGroup into Navigator pane 
var noteListNavigator = new Uri("NoteListRibbonGroup", UriKind.Relative); 
regionManager.RequestNavigate("RibbonHomeTabRegion", noteListNavigator); 

我改变了代码通过与该地区注册了,这样注入的观点:

// Load Ribbon Group into Home tab 
regionManager.RegisterViewWithRegion("RibbonHomeTabRegion", typeof(NoteListRibbonGroup)); 

现在,我可以使用此代码删除RibbonGroup:

if(ribbonHomeTabRegion.Views.Contains(this)) 
{ 
    ribbonHomeTabRegion.Remove(this); 
} 

那么,如何注入的观点显然是重要的。如果您希望能够删除该视图,请注册注册区域经理

0

是否有可能你有一个RegionAdapter在添加它之前将视图封装在另一个视图中? ribbonHomeTabRegion应该有一个收集意见的财产 - 里面有什么吗?

+0

这个答案张贴在我的编辑之前。 – 2011-04-04 16:32:33

0

StockTraderRI Microsoft示例项目包含以下用于从ViewModel中的区域中删除视图的示例。

private void RemoveOrdersView() 
{ 
    IRegion region = this._regionManager.Regions[RegionNames.ActionRegion]; 

    object ordersView = region.GetView("OrdersView"); 
    if (ordersView != null) 
    { 
     region.Remove(ordersView); 
    } 
}