【问题标题】:Using Presenter in Prism在 Prism 中使用 Presenter
【发布时间】:2011-08-04 03:34:48
【问题描述】:

我正在使用 C# 和 WPF 中的 PRISM 开发应用程序。 我是新手,想实现 Presenter。基本上,我想在我的模块中注册一个 Presenter 而不是 View。

目前我在我的模块初始化中执行以下操作:

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.
    }
}

【问题讨论】:

    标签: c# wpf prism modularity cag


    【解决方案1】:

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

    但是,您将如何以及在何处构建您的演示者?谁负责调用 ShowView()?

    我还建议查看 MVVM 模式(您是使用 VM-first 还是 View-first 取决于您),它与 MVP 非常相似,但更适合 WPF 和 Silverlight 应用程序。

    【讨论】:

      【解决方案2】:

      要显示或隐藏区域中的视图,您可以自行添加或删除视图:

      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 );
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 1970-01-01
        • 2013-12-06
        • 2021-05-03
        • 2018-07-08
        • 1970-01-01
        相关资源
        最近更新 更多