2012-08-14 55 views
0

我試圖爲我正在開發的項目實現MVP模式(使用webforms),但是我陷入了事件後要做的事情,特別是一個事件起源於gridview。目前,視圖實現了一個接口,以便演示者可以調用視圖上的方法。MVP與Gridview選定行

我的gridview包含什麼實質上是一些削減員工對象(儘管它不知道這一點),每個都有一個ID,我已經不得不隱藏在網格中。

當在網格行上按下某些按鈕時,可能會發生不同的事件(例如刪除,添加到作業等)。演示者需要訪問員工ID才能執行功能(可能會使用所述ID引發服務層命令)。我試圖保持視圖被動,但我認爲在這個例子中是不可能的。

我看到它的方式,只有少數幾種方法可以完成。在gridrow選擇

  1. ,填充「選擇ID字段」視圖的狀態中(不gridrow ID),並通知消防主持人(事件或演示調用)。演示者將訪問此字段。選擇事件需要從gridview推斷ID。

  2. Pass Id通過演示者通知參數(如果使用事件通知演示者,則爲Event Arguments)直接發送給演示者。選擇事件需要從gridview推斷ID。

如果這是一個下拉列表,它會很容易,因爲你可以只使用GetSelectedValue,並且周圍有這樣的包裝方法(實現視圖接口的方法)。

希望你能幫上忙。

謝謝。

回答

0

好了,到最後我不得不一點點邏輯指定的UI,並且做了以下內容:

對於任何種類的複雜列表對象的,我想通過一個網格(或類似的東西來填充)我通過界面傳遞了一個DTO版本。
例如:

interface IPersonView {

SetPersonList(List<PersonDTO> personList);

event Action PersonDeleteClicked;

PersonDTO GetSelectedPerson()

void HidePersonId() }

  1. 用戶界面使用它並使用它填充網格。

  2. 如果演示者希望隱藏列(如HideId列),則可以使用這些方法。

  3. 在觸發GridView按鈕事件時,我的UI檢索選定的行對象,並將其轉換爲我的列表PersonDTO,並將選定的ID存儲在其自己的狀態中。

  4. 然後我觸發PersonDeleteClicked事件。

  5. 主講,聽此事件,現在調用接口方法:

    PersonDTO GetSelectedPerson()

  6. UI通過使用保存獲取PersonDTO PersonSelectedID

響應