我正在尝试为我正在进行的项目实施MVP模式(使用webforms),但我在事件发生后陷入困境,尤其是源于gridview的项目。目前,view实现了一个接口,以便演示者可以在视图上调用方法。
我的gridview包含基本上是一些减少的员工对象(虽然它不知道这个),每个对象都有一个我已经必须隐藏在网格中的ID。
当在网格行上按下某些按钮时,可能会发生不同的事件(例如,删除,添加到作业等)。演示者需要访问员工ID才能执行功能(这可能会触发具有所述id的服务层命令)。我试图保持View被动,但我认为在这个例子中它是不可能的。
我看到它的方式,只有很少的方法可以做到。
在gridrow选择中,在View的状态(不是gridrow id)中填充“选定的ID字段”,并触发通知演示者(事件或演示者调用)。然后,演示者将访问此字段。选择事件需要从gridview推断ID。
通过演示者通知上的参数(或使用事件通知演示者的事件参数)将Id直接传递给演示者。选择事件需要从gridview推断ID。
如果这是一个下拉列表,那么就很容易,因为你可以使用GetSelectedValue,并且有一个包装器方法(实现视图接口方法)。
希望你能提供帮助。
感谢。
答案 0 :(得分:0)
好的,最后我必须为UI指定一点逻辑,然后执行以下操作:
对于任何我想通过网格(或类似的东西)填充的复杂列表对象,我通过界面传递DTO版本。
例如:
interface IPersonView {
SetPersonList(List<PersonDTO> personList);
event Action PersonDeleteClicked;
PersonDTO GetSelectedPerson()
void HidePersonId() }
UI采用此方法并使用它填充网格。
如果需要,可以使用演示者隐藏列的方法(例如HideId列)。
在触发GridView按钮事件时,我的UI检索选定的行对象,并将其转换为我的列表PersonDTO,并将选定的ID存储在自己的状态中。
然后我触发了PersonDeleteClicked事件。
收听此事件的演示者现在调用接口方法:
PersonDTO GetSelectedPerson()
UI通过使用已保存的PersonSelectedID获取PersonDTO来响应