范围区域嵌套视图

时间:2014-12-04 13:49:06

标签: c# wpf prism mef regions

我指的是帖子 View not connecting to ViewModel using MEF

我有类似的场景,但有一些插件。该应用程序由几个模块组成,Shell已定义主要区域。每个模块都有一个视图(userControl)和viewmodel,视图按需加载到shell区域。问题是视图由子用户控件组成,每个用户控件都有自己的ViewModel。因此,我选择将子控件注入视图中定义的范围区域,因为我可以拥有多个View实例。
但不知怎的,我没有使用MEF。

以下是伪代码和应用程​​序结构。

 1.Shell已定义Mainregion。根据需要在此MainRegion中加载父视图  2.父视图哪个FooParent有一个xaml我在哪里定义一个区域    <ContentControl prism:RegionManager.RegionName ="FooChildRegion" />
3.类后面的FooChildUsercontrol代码标有[Export]属性。
4. FooParentModule有一个初始化方法,带有regionmanager导入构造函数
5.模块初始化方法中的代码

IRegion foochildregion = this._regionManager.Regions["FooChildRegion"]; //This blows.
FooChildView fooChildView = new FooChildView();
IRegionManager allocationViewRegionManager = foochildregion .Add(fooChildView , null, true);
foochildregion .Activate(fooChildView );

获取FooChildRegion实例的第一行是在启动时初始化模块并按需加载视图。

知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

我为此做了一个工作。在Parent中,我将ContentControl定义为

<ContentControl x:Name="FooChildContentControl" />

然后在父控件的代码后面我创建了一个新的regionManager实例并设置为子控件,如下所示

IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
RegionManager rm = new RegionManager();
RegionManager.SetRegionManager(this.FooChildContentControl, rm);
RegionManager.SetRegionName(this.FooChildContentControl, "FooChildRegion");
rm.RegisterViewWithRegion("FooChildRegion", typeof(fooChildView ));