gpt4 book ai didi

winforms - mvp模式中winforms之间的通信

转载 作者:行者123 更新时间:2023-12-04 04:12:21 29 4
gpt4 key购买 nike

我正在处理开发我的应用程序的一个大问题。这是一个基于 C# 的 Winforms 基础应用程序,实现了 Model-View-Presenter 模式,但我不熟悉这种方法。我到处搜索,但没有找到我的问题的答案。

我需要知道如何使用这种模式来允许 winforms 之间的通信,以及演示者必须如何在不将演示者耦合到表单的情况下显示它们。我见过一种使用工厂模式的方法,但不明白如何实现它。

任何帮助或指向正确方向将不胜感激。

最佳答案

断言

Presenter 负责 View 和 Model 之间的协调(如果遵循 Passive View 实现)。

这可能看起来像:

实例化 Presenter 并将自身注入(inject) Presenter 的 View :

IPresenter presenter;
public View() { presenter = new Presenter(this) }

Presenter 实例化一个或多个 View 并将自己注入(inject)到 View 中:
IView1 view1;
public Presenter() { view1 = new View1(this) }

IView1 view1;
IView2 view2;
public Presenter() { view1 = new View1(this); view2 = new View2(this); }

示例

在您的情况下,协调多个 View 的 Presenter 可能看起来像这样(伪):
public class Presenter : IPresenter
{
IView1 view1;
IView2 view2;
public Presenter()
{
view1 = new View1(this);
view2 = new View2(this);
}

private WireViewEvents()
{
view1.OnButtonClick += HandleButtonClickFromView1;
}

public void HandleButtonClickFromView1()
{
view2.SetSomeData();
view2.Show();
}

在此示例中, View1 引发的事件由 Presenter 处理,数据设置在 View2 , 和 View2显示。

请记住,无论您的实现是什么,MVP 的目标是:
  • 关注点分离(UI 与域逻辑分离)。
  • 增加可测试性。

  • 请记住,这只是演示者如何协调多个 View 的基本示例。如果您想从演示者中抽象出您的 View 创建,您可以将创建移动到演示者调用以创建 View 并订阅其事件的另一个容器中。

    关于winforms - mvp模式中winforms之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14858091/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com