鼓泡事件。

我在应用程序中有多个层,我发现自己必须将事件冒泡到GUI层以进行状态栏更改等。 。 我发现自己必须编写重复编码,其中每个层只是订阅来自较低层的事件,然后在回调中简单地向上引发一个事件。 有没有更有效的方法呢?

如果你所做的只是从另一个事件处理程序触发事件处理程序,你可以删除中间人并直接在事件的添加/删除块中挂钩事件处理程序。

例如,如果您有一个带有“SaveButtonClick”事件的UserControl,并且在单击UserControl上的“SaveButton”时调用事件处理程序时要执行的操作,则可以执行以下操作:

public event EventHandler SaveButtonClick { add { this.SaveButton.Click += value; } remove { this.SaveButton.Click -= value; } } 

现在您不需要任何代码来触发SaveButtonClick事件 – 当引发SaveButton.Click事件时(即当有人单击该按钮时)它将自动触发。

Peter Rilling发布了一种模拟winforms中的事件冒泡/广播的方法。 它简单而有效。

http://www.codeproject.com/KB/cs/event_broadcast.aspx

阅读Jeremy Miller的博客“The Shade Tree Developer”,特别是他自己写的CAB系列 – 他谈到的命令模式可能就是你所需要的。

除非我看到更多的设计……否则很难给出一个好的答案。

WPF确实向(自动)UI组件/控制树泡沫事件…现在已经内置到框架中。 所以我猜这是推荐的方式:)

绕过中间人Layer2的麻烦是Layer1和Layer3现在彼此了解……是耦合的。 所以这是一个权衡..如果你对耦合没问题的话。消除中间人/发明一个有这个责任的专门组件。 但是,如果您希望第3层可以热插拔(低耦合),我会说继续冒泡。

您可以拥有仅支持事件的中央通道。 此通道必须是独立的,因此图层仅发布或订阅它。

看看Update Controls .NET 。 这些控件甚至可以通过业务逻辑层发现它们依赖的数据模型部分。 您不必编写任何代码来通知它们。