我目前正在为即将推出的基于WinForms和MVP设计模式的项目准备核心框架。
我不确定,最好的方法是什么,如何在两个视图/演示者之间进行通信。更具体一点 - 我有一个ListView和一个DetailView。当用户点击ListView中的某个项目时,我需要显示该项目的编辑表单,在我的例子中是DetailView。
选项:
ListPresenter应该在点击事件上创建DetailPresenter吗? (工厂可以提供帮助。)
应该在ListPresenter构造函数中注入DetailPresenter的实例吗?
我觉得2)可能是“正确的”解决方案,但我更喜欢在我真正需要的时候创建DetailView / DetailPresenter - 即当用户点击按钮时。
接下来的问题,我不知道如何去做它是对象的生命周期。当我将一个View注入Presenter时,谁负责清理?我已习惯了行为,其中清理是由创建它的同一方进行的。但在这种情况下,我可以想象View可以由Presenter处理。
我希望这些问题不是太通用,我已经阅读了很多关于MVC / MVP的文章,但是他们大多没有比展示如何实现单个View-Presenter通信更进一步。
谢谢。
答案 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);
}
}