Использование Presenter в Prism - PullRequest
0 голосов
/ 04 августа 2011

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

В настоящее время я выполняю в модуле 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 ]

0 голосов
/ 08 августа 2011

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

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 );
    }
}
0 голосов
/ 04 августа 2011

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

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

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

...