2011-12-20 58 views
3

从shell中加载棱镜模块视图我有一个shell项目,它将我的引导程序中的模块加载到我的shell主视图中的选项卡控件中。使用MEF

我刚刚在我的选项卡上实现了一个关闭按钮,现在提出了如何从shell重新加载模块视图的问题?

使用

moduleManager.LoadModule("ModuleA"); 

尝试,但在第一次加载这只能模块。当我调用上面的代码时,它会加载并初始化模块,显示视图。如果我再次关闭视图,第二次我尝试这个它不会重新显示视图(我猜它没有重新初始化模块,因为它已经加载)。

所以,我虽然我想过使用的东西沿着我的外壳下面的几行:

var moduleAView = ServiceLocator.Current.GetInstance<ModuleAView>(); 
regionManager.Regions["TabRegion"].Add(ModuleAView); 
regionManager.Regions["TabRegion"].Activate(ModuleAView); 

麻烦这种方法是如何我不知道贝约在第1行的类型ModuleAView?我没有对模块A的引用,也不想添加一个。我想过一个ModuleAView将实现的通用接口,它可以在模块和shell之间共享,但是当尝试使用上述的ServiceLocator.GetInstance方法时,出现了组合错误。

非常感谢您的帮助。

PS 这是我试过的模块A模块代码。

[ModuleExport(typeof(ModuleA), InitializationMode = InitializationMode.OnDemand)] 
[Module(ModuleName="ModuleA")] 
public class ModuleA : IModule 
{ 
    private IRegionManager _regionManager; 

    [ImportingConstructor] 
    public ModuleA(IRegionManager regionManager) 
    { 
     this._regionManager = regionManager; 
    } 

    public void Initialize() 
    { 
     // add the search view to the region manager. 
     this._regionManager.RegisterViewWithRegion("TabRegion", typeof(Views.ModuleAView)); 
    } 
} 

回答

1

可能是错误的思路。

而不是尝试从shell显示模块的视图,我从moduleA模块订阅的shell发布一个事件。然后,我可以决定在模块本身显示的视图。

希望这会有所帮助。