2011-08-04 70 views
0

我正在C#和WPF中使用PRISM开发应用程序。 我对此很陌生,并希望实施演示者。基本上,我想在我的模块中注册Presenter而不是View。在Prism中使用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

你能做到这一点。实际上,您必须将IAboutModuleView映射到AboutModuleView以及您使用的任何IoC容器,例如统一。然后在您的ShowView方法中,您将在RegionManager上调用RegisterViewWithRegion,传入视图。

但是,如何以及在哪里构建演示者?谁会负责调用ShowView()?我也建议看看MVVM模式(无论您使用VM-first还是View-first都由您决定),这与MVP非常相似,但更适合WPF和Silverlight应用程序。

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); 
    } 
} 
相关问题