Загрузите вид модуля по умолчанию в области, чтобы создать меню - PullRequest
1 голос
/ 24 февраля 2010

Я создаю приложение M-V-VM с динамической загрузкой модулей во время выполнения.

Каждый из этих модулей имеет вид по умолчанию, который индивидуально они показывают в выбранном регионе, когда я иду

_regionManager.Regions["BottomMenuRegion"].Add(
    Container.Resolve<AdminModuleView>(), "AdminView", true);

Однако, когда следующий модуль загружается, он перезаписывает предыдущее загруженное представление. Как я могу загрузить более одного представления в область, чтобы создать «Меню», отображающее представление по умолчанию? * например 1006 *

<ItemsControl cal:RegionManger.RegionName="BottomMenuRegion" />

выглядит как

Module1View Module2View Module3View Module4View и т. Д.

Заранее благодарю.

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Мне удалось сделать это, создав адаптер StackPanelRegion и используя следующий XAML

 <StackPanel  Orientation="Horizontal"
            cal:RegionManager.RegionName="BottomMenuRegion" >

            <ItemsControl>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Grid/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </StackPanel >

Код адаптера региона Здесь для тех, кто в той же ситуации

 public class StackPanelRegionAdapter : RegionAdapterBase<StackPanel>
    {
        public StackPanelRegionAdapter(IRegionBehaviorFactory behaviorFactory) :
            base(behaviorFactory)
        {
        }
        protected override void Adapt(Microsoft.Practices.Composite.Regions.IRegion region, StackPanel regionTarget)
        {
            region.Views.CollectionChanged += (s, e) =>
            {
                if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
                    foreach (FrameworkElement element in e.NewItems)
                        regionTarget.Children.Add(element);
                //Handle remove event as well.. 
            };
        }

        protected override Microsoft.Practices.Composite.Regions.IRegion CreateRegion()
        {
            return new AllActiveRegion();
        }
    }
0 голосов
/ 24 февраля 2010

Если я вас правильно понимаю, вы пытаетесь загрузить в регион, но когда вы загружаете объекты в этот регион, они перезаписывают друг друга?

Вы не можете загрузить более одного вида в один регион. Если вы хотите показать меню, в котором будут отображаться другие виды, вам придется создать две области и создать собственное меню. Поместите меню, показывающее код в ModuleInit, а затем добавьте некоторый код в события щелчка пунктов меню, которые загрузят другие представления в другой «MainRegion»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...