2011-08-04 7 views
0

C#とWPFでPRISMを使用してアプリケーションを開発しています。 私はこれに新しく、発表者を実装したいと思います。基本的には、私のモジュールにViewの代わりにPresenterを登録したいと思います。プレゼンターでプレゼンターを使用

現時点では私は私のモジュールの初期化に次のようにやっている:

iRegionManager.RegisterViewWithRegion("MainRegion", typeof(AboutWindow)); 

私が望む私がプレゼンターを持つようにしたい、私は私のモジュールでプレゼンターを登録しますです。このプレゼンターは、自分の地域のビューを表示する責任があります。

私はいくつかの記事と例を読んでみましたが、私が望むものを正確に得ることができませんでした。次のように

私の要件のための擬似コードは次のとおりです。

public class AboutModule : IAboutModule 
{ 
    IRegionManager iRegionManager = null; 
    IUnityContainer container = null; 

    public AboutModule(IRegionManager iRegionManager, IUnityContainer container) 
    { 
     this.iRegionManager = iRegionManager; 
     this.container = container; 
    } 

    public void Initialize() 
    { 
     //Register my presenter here. 
    } 
} 


internal class AboutModulePresenter : IAboutModulePresenter 
{ 
    private IAboutModuleView iAboutModuleView = null; 

    internal AboutModulePresenter(IAboutModuleView iAboutModuleView) 
    { 
     this.iAboutModuleView = iAboutModuleView; 
    } 
    public IAboutModuleView View 
    { 
     get 
     { 
      return this.iAboutModuleView; 
     } 
    } 
    public void ShowView() 
    { 
     //Register my view with region manager and display in the region. 
    } 
} 

答えて

0

あなたがこれを行うことができます。基本的には、使用しているIoCコンテナなど、IAboutModuleViewをAboutModuleViewにマップする必要があります。統一次に、ShowViewメソッドで、RegionManagerでRegisterViewWithRegionを呼び出し、ビューを渡します。

ただし、あなたはどのようにして発表者を構成しますか?誰がShowView()を呼び出す責任がありますか?

MVPとよく似ているが、WPFやSilverlightアプリケーションに適したMVVMパターン(VM-firstまたはView-firstを使用するかどうかにかかわらず)を見てみることをお勧めします。自分でビューを追加または削除することができます地域のビューを表示または非表示に

0

void AddView() 
{ 
    IRegion region = this._regionManager.Regions["RegionName"]; 

    object presentView = region.GetView("ViewName"); 
    if (presentView == null) 
    { 
     var view = _container.Resolve<View>(); 
     region.Add(view, "ViewName"); 
    } 
} 

void RemoveView() 
{ 
    IRegion region = this._regionManager.Regions["RegionName"]; 

    object presentView = region.GetView("ViewName"); 
    if (presentView != null) 
    { 
     region.Remove(presentView); 
    } 
} 
関連する問題