1

私が取り組んでいるプロジェクトに MVP パターン (Web フォームを使用) を実装しようとしていますが、イベントの後に何をすべきか、特にグリッドビューから発生したものに行き詰まっています。現在、view はインターフェイスを実装しているため、プレゼンターはビューでメソッドを呼び出すことができます。

私の gridview には、基本的にいくつかの削減された従業員オブジェクトが含まれており (ただし、これは認識されていません)、それぞれに ID があり、グリッドで非表示にする必要があります。

グリッド行で特定のボタンが押されると、異なるイベントが発生する場合があります (削除、ジョブへの追加など)。プレゼンターは、機能を実行するために従業員 ID にアクセスする必要があります (おそらく、この ID を使用してサービス レイヤー コマンドが起動されます)。ビューをパッシブに保とうとしていますが、この例では不可能だと思います。

私の見方では、これを実行できる方法はごくわずかです。

  1. グリッド行の選択時に、ビューの状態 (グリッド行 ID ではありません) 内の「選択された ID フィールド」にデータを入力し、通知プレゼンター (イベントまたはプレゼンター呼び出し) を起動します。プレゼンターはこのフィールドにアクセスします。[イベントは gridview から ID を推測する必要があります] を選択します。

  2. プレゼンター通知のパラメーター (イベントを使用してプレゼンターに通知する場合はイベント引数) を介して、ID を直接プレゼンターに渡します。[イベントは gridview から ID を推測する必要があります] を選択します。

これがドロップダウン リストの場合は、GetSelectedValue を使用するだけで簡単に作成でき、これにラッパー メソッドを使用できます (ビュー インターフェイス メソッドを実装します)。

お役に立てれば幸いです。

ありがとう。

4

1 に答える 1

1

Ok, in the end I had to designate a little logic to the UI, and did the following:

For any sort of complex list object that I wish to be populated by a grid (or something similar to) I am passing down a DTO version through the interface.
eg:

interface IPersonView {

SetPersonList(List<PersonDTO> personList);

event Action PersonDeleteClicked;

PersonDTO GetSelectedPerson()

void HidePersonId() }

  1. The UI takes this and populates the grid with it.

  2. There are methods available to the presenter to hide columns if it wishes (such as HideId column).

  3. On the firing of the GridView button event, my UI retrieves the selected row object, and convert it to my list PersonDTO, and stores the selected ID in its own state.

  4. I then fire the PersonDeleteClicked event.

  5. The presenter, listening for this event, now calls interface method:

    PersonDTO GetSelectedPerson()

  6. UI responds by fetching PersonDTO by using saved PersonSelectedID

于 2012-08-29T16:09:15.140 に答える