Призма 4: выгрузка вида из региона? - PullRequest
5 голосов
/ 04 апреля 2011

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

Я пишу приложение WPF Prism с элементом управления Ribbon в командной консоли.На вкладке «Главная» ленты находится область RibbonHomeTabRegion, в которую один из моих модулей (назовите его ModuleA ) загружает RibbonGroup.Это прекрасно работает.

Когда пользователь уходит от модуля A, 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 ]

4 голосов
/ 04 апреля 2011

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

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

1 голос
/ 06 октября 2016

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

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

    object ordersView = region.GetView("OrdersView");
    if (ordersView != null)
    {
        region.Remove(ordersView);
    }
}
0 голосов
/ 04 апреля 2011

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

...