【问题标题】:MVP Presenter to Presenter communicationMVP Presenter 到 Presenter 通信
【发布时间】:2014-07-15 06:10:46
【问题描述】:

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

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

选项:

  1. ListPresenter 是否应该在点击事件上创建 DetailPresenter? (工厂可能会有所帮助。)

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

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

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

我希望这些问题不要太笼统,我已经阅读了很多关于 MVC/MVP 的文章,但它们大多只是展示了如何实现单个 View-Presenter 通信。

谢谢。

【问题讨论】:

  • winforms 不推荐用于任何新项目。您应该认真考虑改用当前的相关技术。
  • 我知道 WinForms 已经有一段时间没有更新了,而且可能永远不会更新,但是对于某些项目,在我看来,它仍然是完全有能力的技术。无论如何,桌面 .NET 应用程序还有什么其他选择? WPF?仅仅因为它具有非常好的数据绑定能力,它并不能使它成为所有项目的完美解决方案。我们考虑过使用它,但还是决定使用 WinForms。
  • perfectly capable technology - 直到您需要一些看起来不像 Windows 3.1 的东西,或者直到您需要将 UI 与应用程序的行为正确分离。 what other choice is there for a desktop .NET application? - WPF 是 .Net Windows 桌面 UI 的首选技术。无论您使用 winforms 可以实现什么,您也可以在 WPF 中以 10% 的代码量实现相同的效果。更不用说创建出色用户体验的可定制性和易于开发。
  • 好吧,我不会同意 WinForms 与 WPF。我都使用过,对于某些项目,它是 WPF,对于其他项目,我宁愿使用 WinForms。但是,即使对于 MVVM,这个问题也是有效的。您单击一个按钮,您的 ViewModel 接收到命令,现在呢?它是自己创建 DetailViewModel 还是应该期望 DetailViewModel 被注入 ListViewModel 构造函数?另外,谁负责对象的生命周期?同样的问题,不管是 WinForms 还是 WPF。
  • 在 MVVM 中,ViewModel 负责它们的“子”或“详细”VM 生命周期,并且视图只需通过 DataBinding 对其进行响应,而无需额外的管道。

标签: winforms mvp


【解决方案1】:

您可以将 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);
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多