C# 在视图中有自己区域的棱镜模块

C# 在视图中有自己区域的棱镜模块,c#,silverlight,prism-4,C#,Silverlight,Prism 4,我正在用Silverlight 5(MefBootstrapper)在Prism V4.1中练习。不幸的是,我找不到这种情况的实施: 我的Shell.xaml中有两个区域 我的模块(moduleCatalog.xaml中描述的xap文件)(Module1和Module2)被注入这个区域 我在模块中的一个视图(例如模块1)有自己的区域 我想使用prism框架的强大功能将另一个模块注入到这个Module1视图中。事实上,这个模块应该是一个小的prism应用程序,它有自己的模块,可以将参数传递给Mod

我正在用Silverlight 5(MefBootstrapper)在Prism V4.1中练习。不幸的是,我找不到这种情况的实施:

  • 我的Shell.xaml中有两个区域
  • 我的模块(moduleCatalog.xaml中描述的xap文件)(Module1和Module2)被注入这个区域
  • 我在模块中的一个视图(例如模块1)有自己的区域
  • 我想使用prism框架的强大功能将另一个模块注入到这个Module1视图中。事实上,这个模块应该是一个小的prism应用程序,它有自己的模块,可以将参数传递给Module2和其他模块

    有什么方法可以实现这一点吗


    我的意思是:模块1内部的视图是否可以创建自己的区域,因此从属模块可以将视图注入该区域?

    是的,它可以,为什么不可以?加载依赖模块后,只需在此区域注册视图。例如,您可以在从属模块的
    IModule.Initialize
    方法中执行此操作:

    public void Initialize()
    {
        regionManager.RegisterViewWithRegion("Module1RegionName", () => serviceLocator.GetInstance<DependentModuleView>());
    }
    
    public void Initialize()
    {
    regionManager.RegisterViewWithRegion(“ModuleRegionName”,()=>serviceLocator.GetInstance());
    }
    
    然后,您可以导航到此视图,或在注册后随时激活它

    regionManager.RequestNavigate("Module1RegionName", new Uri("DependentModuleView", UriKind.Relative));
    
    //or resolve the view and activate it
    var view = serviceLocator.GetInstance<DependentModuleView>();
    var region = regionManager.Regions["Module1RegionName"];
    region.Activate(view);
    
    regionManager.RequestNavigate(“moduleregionname”,新Uri(“DependentModuleView”,UriKind.Relative));
    //或者解析视图并激活它
    var view=serviceLocator.GetInstance();
    var region=regionManager.Regions[“Module1RegionName”];
    区域。激活(视图);
    

    至于模块之间的通信,您有几个选项。阅读了解更多信息。

    ,感谢您的帮助。但我在尝试解析视图时出错。IModule.Initialize中的此代码引发异常:
    ServiceLocator.Current.GetInstance()异常:尝试获取LoaderTabView类型的实例时发生激活错误,键“”视图类:
    [Export(“LoaderTabView”)]公共部分类LoaderTabView:UserControl
    我发现了错误。我应该使用
    [Export]公共部分类LoaderTabView:UserControl
    而不是
    [Export](“LoaderTabView”)]公共部分类LoaderTabView:UserControl
    @Grigory我很高兴你能解决这个问题。