5

如何从 Prism 区域卸载视图?

我正在编写一个在 Shell 中带有 Ribbon 控件的 WPF Prism 应用程序。功能区的 Home 选项卡包含一个区域,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);
}

我仍然遇到同样的错误,这告诉我有一些非常基本的东西我做错了。

谁能指出我正确的方向?谢谢你的帮助。

4

3 回答 3

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);
}

所以,你如何注入视图显然很重要。如果您希望能够移除视图,请通过注册区域管理器进行注入

于 2011-04-04T19:47:19.617 回答
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);
    }
}
于 2016-10-06T07:26:53.613 回答
0

是否有可能您有一个 RegionAdapter 在添加之前将视图包装在另一个视图中?应该有一个包含视图集合的ribbonHomeTabRegion属性 - 它里面有什么吗?

于 2011-04-04T02:37:49.147 回答