【发布时间】:2009-09-18 01:50:36
【问题描述】:
我正在尝试在 WinForms 中使用 MVP,但对如何最好地处理子视图之间的协调感到困惑。
例如,我有一个父视图,它有两个子视图。一个子视图上的事件需要导致第二个子视图采取行动。
父视图应该直接控制这个吗?看来我这样做是在绕过 MVP 模式。
或者子视图是否应该将彼此作为构造函数参数?在那种情况下,当第一个子视图触发事件时,第二个子视图会接收到该事件,然后通知其演示者发生了什么事?然后演示者需要从第一个子视图(它甚至不知道)获取数据,以便告诉第二个子视图要做什么。这似乎令人费解,所以我觉得我错过了一些东西。
下面是一些针对这种情况的伪代码:
public class ParentView : UserControl, IParentView
{
private ChildViewOne childViewOne;
private ChildViewTwo childViewTwo;
private ParentViewPresenter presenter;
private RegisterEvents()
{
childViewOne.EventOccured += new EventHandler(HandleEvent);
}
private void HandleEvent()
{
childViewTwo.DoSomething();
}
}
【问题讨论】:
-
“一个子视图上的事件需要导致第二个子视图采取行动。”究竟发生了什么?
-
例如,假设 childViewOne 是时间线,childViewTwo 是视频。时间线公开了一个 TimeChanged 事件,视频需要通过更改视频的当前帧来响应该事件。
标签: c# winforms model-view-controller user-interface mvp