繁体   English   中英

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

[英]Passing UI Entities between User Controls in MVP

我是第一次实现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;
      }
}

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

这是我如何应对这一问题的一种方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM