Использование Presenter в Prism

Я разрабатываю приложение, используя PRISM в C# и WPF. Я новичок в этом и хотел бы реализовать Presenter. По сути, я хотел бы зарегистрировать докладчика вместо просмотра в моем модуле.

В настоящее время я делаю следующее в модуле Initialize:

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

2 ответа

Решение

Вы могли бы сделать это. По сути, вам придется сопоставить IAboutModuleView с AboutModuleView с любым контейнером IoC, который вы используете, например, Unity. Затем в вашем методе ShowView вы должны вызывать RegisterViewWithRegion для RegionManager, передавая представление.

Тем не менее, как и где бы вы построили свой докладчик? Кто будет отвечать за вызов ShowView()?

Я также рекомендовал бы взглянуть на шаблон MVVM (независимо от того, используете ли вы VM-first или View-first до вас), который довольно похож на MVP, но лучше подходит для приложений WPF и Silverlight.

Чтобы показать или скрыть вид в регионе, вы можете добавить или удалить вид самостоятельно:

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 );
    }
}
Другие вопросы по тегам