2011-12-20 9 views
3

私のブートストラップのモジュールをシェルのメインビューのタブコントロールにロードするシェルプロジェクトがあります。MEFを使ってシェルからプリズムモジュールビューをロード

タブアイテムに閉じるボタンを実装しました。これで、シェルからモジュールビューを再読み込みする方法の質問が表示されます。

moduleManager.LoadModule("ModuleA"); 

を使用してみましたが、モジュールが最初にロードされ、この唯一の作品。上記を呼び出すと、モジュールが読み込まれて初期化され、ビューが表示されます。私はビューをもう一度閉じると、私はこれを試して2回目(私はそれがすでに読み込まれているようにモジュールを再初期化しないと思います)ビューをreshowしません。このアプローチの

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

トラブルがどのように私のシェルは1行目のtype ModuleAViewについて知っているんされています

だから、私はしかし、私は私のシェルで、次の線に沿って何かを使用して考えましたか?私はモジュールAへの参照を持っていないし、モジュールAを追加したくない。私はModuleAViewが実装する共通のインターフェースについて考えました。これはモジュールとシェルの間で共有できますが、上記のようにServiceLocator.GetInstanceアプローチを使用しようとすると構図エラーが発生しました。

ご協力いただきありがとうございます。

PS これは私が試したモジュールのモジュールコードです。

[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

これはおそらく間違ったトラックに沿って考えていたでしょうか。

シェルからモジュールのビューを表示しようとするのではなく、moduleAモジュールがサブスクライブするシェルからイベントを発行します。次に、モジュール自体にどのようなビューを表示するかを決めることができます。

これが役に立ちます。

関連する問題