带有Gridview Selected MV的MVP

时间:2012-08-14 16:31:42

标签: gridview mvp passive-view

我正在尝试为我正在进行的项目实施MVP模式(使用webforms),但我在事件发生后陷入困境,尤其是源于gridview的项目。目前,view实现了一个接口,以便演示者可以在视图上调用方法。

我的gridview包含基本上是一些减少的员工对象(虽然它不知道这个),每个对象都有一个我已经必须隐藏在网格中的ID。

当在网格行上按下某些按钮时,可能会发生不同的事件(例如,删除,添加到作业等)。演示者需要访问员工ID才能执行功能(这可能会触发具有所述id的服务层命令)。我试图保持View被动,但我认为在这个例子中它是不可能的。

我看到它的方式,只有很少的方法可以做到。

  1. 在gridrow选择中,在View的状态(不是gridrow id)中填充“选定的ID字段”,并触发通知演示者(事件或演示者调用)。然后,演示者将访问此字段。选择事件需要从gridview推断ID。

  2. 通过演示者通知上的参数(或使用事件通知演示者的事件参数)将Id直接传递给演示者。选择事件需要从gridview推断ID。

  3. 如果这是一个下拉列表,那么就很容易,因为你可以使用GetSelectedValue,并且有一个包装器方法(实现视图接口方法)。

    希望你能提供帮助。

    感谢。

1 个答案:

答案 0 :(得分:0)

好的,最后我必须为UI指定一点逻辑,然后执行以下操作:

对于任何我想通过网格(或类似的东西)填充的复杂列表对象,我通过界面传递DTO版本。
例如:

interface IPersonView {

SetPersonList(List<PersonDTO> personList);

event Action PersonDeleteClicked;

PersonDTO GetSelectedPerson()

void HidePersonId() }

  1. UI采用此方法并使用它填充网格。

  2. 如果需要,可以使用演示者隐藏列的方法(例如HideId列)。

  3. 在触发GridView按钮事件时,我的UI检索选定的行对象,并将其转换为我的列表PersonDTO,并将选定的ID存储在自己的状态中。

  4. 然后我触发了PersonDeleteClicked事件。

  5. 收听此事件的演示者现在调用接口方法:

    PersonDTO GetSelectedPerson()

  6. UI通过使用已保存的PersonSelectedID获取PersonDTO来响应