我正在构建一个M-V-VM应用程序,在运行时动态加载模块。
这些模块中的每一个都有一个默认视图,当我去
时,它们会单独显示在所选区域上_regionManager.Regions["BottomMenuRegion"].Add(
Container.Resolve<AdminModuleView>(), "AdminView", true);
但是,当下一个模块加载时,它会覆盖以前加载的视图。如何将多个视图加载到某个区域,以便创建一个显示默认视图的“菜单”? e.g
<ItemsControl cal:RegionManger.RegionName="BottomMenuRegion" />
看起来像
Module1View Module2View Module3View Module4View等
提前感谢你。
答案 0 :(得分:1)
我设法通过创建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();
}
}
答案 1 :(得分:0)
如果我理解你,你正试图加载到一个区域,但当你将对象加载到该区域时,它们会相互覆盖?
您无法将多个视图加载到一个区域中。如果您想要显示一个显示其他视图的菜单,则必须创建两个区域并创建自己的菜单。将显示代码的菜单放入ModuleInit,然后将一些代码添加到菜单项的单击事件中,这些事件会将其他视图加载到不同的“MainRegion”