2013-01-16 31 views
1

我正在首次實現MVP模式。我的應用程序是一個嚮導。有一種形式,並且嵌入了多個用戶控件。 每個控件都是一個視圖,每個視圖都有一個演示者。我正在嘗試實現被動MVP模式。演示者負責處理所有操作並更新視圖。在MVP中的用戶控件之間傳遞UI實體

問題是傳遞UI實體。我想從第一個視圖傳遞用戶輸入到第二個視圖,因爲第二個視圖需要處理它。

所有視圖都在Win Form上實例化。

任何幫助將不勝感激。

Regards

回答

0

您可以創建一個包含所有您需要的實體的類。 當你打開一個新的窗口,你在構造函數中傳遞類時,你的數據已經被傳送。

+0

我已經實現了相同。在這種情況下,我創建一個對象並將其傳遞給視圖的參數化構造函數。 但是,由於我的主要表單執行所有導航,因此我在太多通行證中登陸。 第一個視圖與主窗體談論關於 用戶輸入和主窗體,然後談到 第二視圖關於相同。 如果明天我想添加另一層, 說經理,那麼它會增加頭痛。 第一視圖將告訴經理, 經理談話的主要形式,然後 主要形式談判第二視圖 –

+0

是否有任何其他標準的方式來實現相同? –

0

我思考以下情形: 創建一個枚舉用於容納不同意見

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; 
     } 
} 

使用這種類型的系統的好處是,所有的數據仍然在類中,你只需顯示/關閉你的意見。

這是我如何反擊這種方式。