2

我正在构建一个在运行时动态加载模块的 MV-VM 应用程序。

这些模块中的每一个都有一个默认视图,当我去时,它们会单独显示在所选区域上

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

但是,当下一个模块加载时,它会覆盖先前加载的视图。如何将多个视图加载到一个区域中,以便创建一个显示默认视图的“菜单”?例如

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

好像

模块1查看模块2查看模块3查看模块4查看等

提前谢谢你。

4

2 回答 2

2

我设法通过创建 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();
        }
    }
于 2010-02-25T08:37:54.893 回答
0

如果我理解正确,您正在尝试加载到一个区域,但是当您将对象加载到该区域时,它们会相互覆盖吗?

您不能将多个视图加载到一个区域中。如果您想显示一个将显示其他视图的菜单,则必须创建两个区域并制作自己的菜单。将菜单显示代码放入 ModuleInit 中,然后将一些代码添加到菜单项的单击事件中,这会将其他视图加载到不同的“MainRegion”中

于 2010-02-24T14:46:10.030 回答