Загрузка значений по умолчанию в модуле для создания меню

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

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

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

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

выглядит как

Модуль1View Module2View Module3View Module4View и т.д.

Благодарим вас заранее.

2 ответа

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

<stackpanel orientation="Horizontal" cal:regionmanager.regionname="BottomMenuRegion">
 <itemscontrol>
 <itemscontrol.itemspanel>
 <itemspaneltemplate>
 <grid>
 </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();
 }
 }
</stackpanel>


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

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

licensed under cc by-sa 3.0 with attribution.