Вложенные регионы MVVM не могут найти дочерние регионы - PullRequest
2 голосов
/ 26 марта 2010

У меня есть меню (Telerik RadMenu), в котором есть вложенные регионы, определенные в командной консоли. В моих модулях я буду регистрировать пункты меню или панели инструментов в этих регионах. Все хорошо работает для корневых областей, но когда я пытаюсь добавить что-то в дочернюю область, например в область «Файл» в меню, я получаю сообщение об ошибке «Сообщение об исключении было следующим: Менеджер области не содержит область FileMenuRegion».

Однако, как я уже сказал, если я изменю этот код

regionManager.Regions[RegionNames.FileMenuRegion].Add(menuItem);

к этому

regionManager.Regions[RegionNames.MainMenuRegion].Add(menuItem);

все отлично работает. Ниже приведен XAML для моего меню, чтобы вы могли увидеть названия регионов и их структуру. Любая помощь будет принята с благодарностью, так как это сбивает с толку и сводит меня с ума.

Меню

    <telerikNavigation:RadMenu x:Name="menuMain" DockPanel.Dock="Top" prismrgn:RegionManager.RegionName="{x:Static i:RegionNames.MainMenuRegion}" telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.CurrentTheme}">
            <telerikNavigation:RadMenuItem Header="{x:Static p:Resources.File}" prismrgn:RegionManager.RegionName="{x:Static i:RegionNames.FileMenuRegion}">
                <telerikNavigation:RadMenuItem Header="{x:Static p:Resources.Exit}" Command="{Binding ExitCommand}">
                    <telerikNavigation:RadMenuItem.Icon>
                        <Image Source="../Resources/Close.png" Stretch="None" />
                    </telerikNavigation:RadMenuItem.Icon>
                </telerikNavigation:RadMenuItem>
            </telerikNavigation:RadMenuItem>
        </telerikNavigation:RadMenu>

1 Ответ

1 голос
/ 28 августа 2010

Приведенный выше XAML идет вразрез с дизайном регионов PRISM.

Все регионы должны быть присоединены к элементам управления, производным от ContentControl. Процесс загрузки зарегистрированных в регионе представлений заменяет содержимое контейнера региона любыми совпадающими представлениями, зарегистрированными для этого имени региона. Это удалит ваше вложенное имя региона, поэтому вы увидите, что ошибка верна.

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

...