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

时间:2011-04-04 02:28:25

标签: prism prism-4

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

我正在使用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);
}

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

有人能指出我正确的方向吗?谢谢你的帮助。

3 个答案:

答案 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应该有一个带有视图集合的属性 - 里面有什么东西吗?