如何从棱镜区域卸载视图?
我正在使用Shell中的Ribbon控件编写WPF Prism应用程序。功能区的“主页”选项卡包含一个区域RibbonHomeTabRegion
,其中一个模块(称为 ModuleA )加载RibbonGroup
。这很好。
当用户离开ModuleA时,需要从RibbonGroup
卸载RibbonHomeTabRegion
。我没有用另一个视图替换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);
}
我仍然得到同样的错误,这告诉我有一些非常基本的错误。
有人能指出我正确的方向吗?谢谢你的帮助。
答案 0 :(得分:4)
我找到了答案,虽然我不能说我完全理解它。我曾使用IRegionManager.RequestNavigate()将RibbonGroup注入Ribbon的Home选项卡,如下所示:
// 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);
}
所以,你如何注入视图显然很重要。如果您希望能够删除视图,请通过注册与区域管理器进行注入
答案 1 :(得分:1)
Microsoft的StockTraderRI示例项目包含以下从ViewModel中删除区域视图的示例。
private void RemoveOrdersView()
{
IRegion region = this._regionManager.Regions[RegionNames.ActionRegion];
object ordersView = region.GetView("OrdersView");
if (ordersView != null)
{
region.Remove(ordersView);
}
}
答案 2 :(得分:0)
是否有可能在添加视图之前将RegionAdapter包装在另一个视图中? ribbonHomeTabRegion
应该有一个带有视图集合的属性 - 里面有什么东西吗?