在MVP的用户控件之间传递UI实体

本文关键字:UI 实体 之间 控件 MVP 用户 | 更新日期: 2023-09-27 17:53:25

我是第一次实现MVP模式。我的应用程序是一个向导。只有一个表单,其中嵌入了多个User控件。每个控件都是一个视图,每个视图都有一个呈现者。我正试图实现被动MVP模式。呈现者负责处理所有动作和更新视图。

问题是传递UI实体。我想把用户输入从我的第一个视图传递到第二个视图,因为第二个视图需要对它进行处理。

所有的视图都在Win Form中实例化。

任何帮助都将是非常感激的。

在MVP的用户控件之间传递UI实体

您可以创建一个类,其中包含您需要的所有实体。当打开一个新窗口时,您在构造函数中传递类,瞧,您的数据已被传输。

我正在考虑以下场景:创建一个可枚举对象来保存不同的视图

public enum Views{
First,Second, Manager,Third,
}

为你的buttonstate创建一个可枚举对象

public enum ButtonState{Start,Next,Cancel,Back,}

创建保存所有数据的类

public class MyData
{
  //properties here
  //Also have a default constructor
  public MyData()
  {
  }
}

然后在表单中使用以下new items:

Public Views MyViewState { get; set;}
Public ButtonState MyButtonState { get; set;}
Public MyData dataclass { get; set;}
Public Form1()
{
InitializeComponent();
MyViewState = Views.First;
MyButtonState = ButtonState.Start;
dataclass = new MyData(); //mostly at startup your class data is empty ...
ControlViews();
}
Public void ControlViews()
{
    //Based on your Buttons you will do what each form is asked to do:
      switch(MyButtonState)
      {
       case ButtonState.Start:
        //Since this is your startup: you only need to show your next view and replace you MyViewState
        MyViewState = Views.First;
        ///code for showing your view
       Break;
       case ButtonState.Next:
        //Since this time you probably filled in data you need to know in which MyViewState you are
         Switch (MyViewState)
         {
          Case Views.First:
           //You want to keep your data
           ///Code for placing data into your dataclass
           //After replacing the code, you then need to do some calculations and open the next view
           ///Code for calculations and placing this data in the form
           ///Code for opening the second view
           MyViewState = Views.Second;
          Break;
           // you then need to do this for each MyViewState
         }
       Break;
      }
}

使用这种系统的优点是所有数据都保留在类中,您只需显示/关闭视图。

这是我对付这个的一种方法