MVP Presenter与Presenter沟通

时间:2014-05-26 12:52:37

标签: winforms mvp

我目前正在为即将推出的基于WinForms和MVP设计模式的项目准备核心框架。

我不确定,最好的方法是什么,如何在两个视图/演示者之间进行通信。更具体一点 - 我有一个ListView和一个DetailView。当用户点击ListView中的某个项目时,我需要显示该项目的编辑表单,在我的例子中是DetailView。

选项:

  1. ListPresenter应该在点击事件上创建DetailPresenter吗? (工厂可以提供帮助。)

  2. 应该在ListPresenter构造函数中注入DetailPresenter的实例吗?

  3. 我觉得2)可能是“正确的”解决方案,但我更喜欢在我真正需要的时候创建DetailView / DetailPresenter - 即当用户点击按钮时。

    接下来的问题,我不知道如何去做它是对象的生命周期。当我将一个View注入Presenter时,谁负责清理?我已习惯了行为,其中清理是由创建它的同一方进行的。但在这种情况下,我可以想象View可以由Presenter处理。

    我希望这些问题不是太通用,我已经阅读了很多关于MVC / MVP的文章,但是他们大多没有比展示如何实现单个View-Presenter通信更进一步。

    谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将ListPresenter和DetailPresenter包装在ListDetailPresenter中。

public class ListDetailPresenter
{
    private ListPresenter _listPresenter;
    private DetailPresenter _detailPresenter;

    public ListDetailPresenter()
    {
        _listPresenter = new ListPresenter();
        _detailPresenter = new DetailPresenter();

        _listPresenter.SelectionChanged += OnSelectionChanged;
    }

    private void OnSelectionChanged(object sender, EventArgs e)
    {
        _detailPresenter.SetItem(_listPresenter.SelectedItem);
    }
}