jam*_*lle 5 c# model-view-controller mvp user-interface winforms
我试图在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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以查看事件聚合器模式。它将允许您保持一切松散耦合。Prism 附带了一个,并且使用起来非常简单,无需购买整个 Prism 框架/库。
您的代码可能如下所示:
public class ChildViewOne {
private IEventAggregator evtAggregator;
public ChildViewOne(IEventAggregator evtAggregator) {
this.evtAggregator = evtAggregator;
}
private void OnEventOccured(){
evtAggregator.GetEvent<EventOccured>().Publish();
}
}
publish class ChildViewTwo {
private IEventAggregator evtAggregator;
public ChildViewTwo(IEventAggregator evtAggregator) {
evtAggregator.GetEvent<EventOccured>().Subscribe(OnEventOccured);
}
private void OnEventOccured() {
// Do something here...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:Brian Noyes 已将 Prism 事件聚合器移植到 winforms。在他的博客上查看这里
| 归档时间: |
|
| 查看次数: |
1199 次 |
| 最近记录: |