Призма 4: Разгрузка обзора из региона?

Как выгрузить вид из области призмы?

Я пишу приложение WPF Prism с элементом управления Ribbon в оболочке. Вкладка 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);
}

Я все еще получаю ту же ошибку, которая говорит мне, что я делаю что-то довольно простое.

Может кто-то указать мне верное направление? Спасибо за вашу помощь.


person David Veeneman    schedule 04.04.2011    source источник


Ответы (3)


Я нашел свой ответ, хотя не могу сказать, что полностью его понимаю. Я использовал IRegionManager.RequestNavigate () для вставки RibbonGroup во вкладку 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);
}

Итак, очевидно, имеет значение то, как вы вводите представление. Если вы хотите удалить представление, введите его, зарегистрировавшись в Региональном менеджере.

person David Veeneman    schedule 04.04.2011

StockTraderRI Example Project от Microsoft содержит следующий пример удаления представлений из региона в ViewModel.

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

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

Возможно ли, что у вас есть RegionAdapter, который обертывает представление внутри другого представления перед его добавлением? У ribbonHomeTabRegion должно быть свойство с коллекцией представлений - есть ли что-нибудь внутри?

person Paul Stovell    schedule 04.04.2011