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

C# 在MVP中的用户控件之间传递UI实体,c#,C#,我第一次实现MVP模式。我的应用程序是一个向导。只有一个表单,并且有多个用户控件嵌入其中。 每个控件都是一个视图,每个视图都有一个演示者。我正在尝试实现被动MVP模式。演示者负责处理所有操作并更新视图 问题正在传递UI实体。我想将用户输入从第一个视图传递到第二个视图,因为第二个视图需要对其进行处理 所有视图都在Win表单上实例化 我们将非常感谢您的帮助 关于您可以创建一个类来保存您需要的所有实体。 当打开一个新窗口时,你在构造函数中传递了这个类,瞧,你的数据已经被传输了。我在考虑以下场景: 创建

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

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

所有视图都在Win表单上实例化

我们将非常感谢您的帮助


关于

您可以创建一个类来保存您需要的所有实体。
当打开一个新窗口时,你在构造函数中传递了这个类,瞧,你的数据已经被传输了。

我在考虑以下场景: 创建用于保存不同视图的枚举

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()
  {
  }
}
然后在表格中使用以下新项目:

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;
      }
}
使用这种系统的优点是,所有数据都保留在类中,您只需显示/关闭视图


这是我应对这种情况的一种方法。

我已经实现了同样的方法。在本例中,我创建一个对象并将其传递给视图的参数化构造函数。但是由于我的主要形态执行所有的导航,我在过多的关卡中着陆。第一个视图与主窗体讨论用户输入,然后主窗体与第二个视图讨论相同的内容。如果明天我想再增加一层,经理说,那会增加头痛。第一个视图将告诉经理,经理与主窗体对话,然后主窗体与第二个视图对话是否有其他标准方法实现相同的目标?