Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 范围区域嵌套视图_C#_Wpf_Prism_Mef_Regions - Fatal编程技术网

C# 范围区域嵌套视图

C# 范围区域嵌套视图,c#,wpf,prism,mef,regions,C#,Wpf,Prism,Mef,Regions,我指的是线程。 我有类似的场景,但有几个插件。该应用程序由几个模块组成,Shell定义了主要区域。每个模块都有一个视图(userControl)和viewmodel,视图根据需要加载到shell区域中。问题在于视图由子用户控件组成,每个子用户控件都有自己的ViewModel。因此,我选择在视图中定义的范围区域中注入子控件,因为我可以拥有视图的多个实例但不知何故,我无法使用MEF以下是伪代码和应用程序结构。 1.Shell已定义Mainregion。按需加载此主区域中的父视图。 2.父视图,其中F

我指的是线程。

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

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

1.Shell已定义Mainregion。按需加载此主区域中的父视图。
2.父视图,其中FooParent有一个xaml,我在其中定义了一个区域。

3.FooChildUsercontrol代码隐藏类用[Export]属性标记
4.FooParentModule有一个initialize方法,其中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实例的第一行在启动时初始化模块,并根据需要加载视图


你知道我在这里遗漏了什么吗?

我找到了解决这个问题的办法。在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 ));
IRegionManager regionManager=ServiceLocator.Current.GetInstance();
RegionManager rm=新RegionManager();
RegionManager.SetRegionManager(this.FooChildContentControl,rm);
RegionManager.SetRegionName(this.FooChildContentControl,“FooChildRegion”);
rm.RegisterViewWithRegion(“FooChildRegion”,类型为(fooChildView));