我在应用程序中有多个图层,并且我发现自己不得不将事件吹到GUI层以进行状态栏更改等。 。我发现自己必须重复编写代码,其中每一层只需订阅来自较低层的事件,然后在回调中简单地向事件链上报事件。有没有更有效的方法来做到这一点?冒泡事件。
冒泡事件。
回答
如果你正在做的是从另一个事件处理程序中触发一个事件处理程序,那么可以裁剪掉中间人并直接在事件的add/remove块中挂接事件处理程序。
例如,如果你有一个“SaveButtonClick”事件用户控件,以及所有你想做的事时,就是调用事件处理程序上点击你的用户控件的“SaveButton”的时候,你可以这样做:
public event EventHandler SaveButtonClick
{
add { this.SaveButton.Click += value; }
remove { this.SaveButton.Click -= value; }
}
现在,您不需要任何代码来触发SaveButtonClick事件 - 当SaveButton.Click事件被引发时(即当有人单击该按钮时)它将自动被触发。
您可以拥有仅支持事件的中央通道。该频道必须是独立的,因此该图层只能发布或订阅该频道。
这听起来很有趣,但解释很模糊。你能举一些例子吗? – spoulson 2008-10-20 01:43:36
除非我看到更多的设计..它会很难给出一个很好的答案。
WPF确实(自动)将UI组件/控件树冒泡起来......现在已经内置到框架中了。所以我想这是推荐的方式:)
绕过中间人Layer2的麻烦在于Layer1和Layer3现在彼此认识...耦合。所以它是一个权衡..如果你对联轴器没问题..消除中间人/发明一个专门的组件与这个责任。但是,如果你期望第3层是热插拔(低耦合),我会说继续冒泡。
看看Update Controls .NET。这些控件甚至通过业务逻辑层来发现他们依赖的数据模型的各个部分。您不必编写任何代码来通知他们。
阅读Jeremy Miller的博客“The Shade Tree Developer”,特别是他的Write Your Own CAB series - 他谈论的命令模式可能是你需要的东西。
Peter Rilling发布了一种在winforms中模拟Event Bubbling/Broadcasting的方法。 它简单而有效。
- 1. 事件不冒泡
- 2. Winforms冒泡事件
- 3. JavaScript事件冒泡
- 4. jquery datepicker冒泡的事件
- 5. jQuery的事件冒泡
- 6. 事件冒泡奇怪
- 7. jQuery和事件冒泡... AGAIN
- 8. Jquery冒泡点击事件
- 9. MouseDoubleClick事件不会冒泡
- 10. C#冒泡/传递事件
- 11. 冒泡事件设计
- 12. 的Javascript事件不冒泡
- 13. jquery点击事件冒泡
- 14. Raphael.JS,防止事件冒泡
- 15. 停止href事件冒泡
- 16. 事件冒泡事件代表团
- 17. 事件冒泡和onblur事件
- 18. 事件捕获vs事件冒泡
- 19. LongListSelector - 点击事件冒泡SelectionChanged事件
- 20. 在javascript中单击事件冒泡或失败冒泡
- 21. JavaScript事件冒泡工作不正常
- 22. 使用querySelector冒泡的事件
- 23. 在IE浏览器冒泡事件
- 24. ASP.Net用户控制事件冒泡(C#)
- 25. 如何让PropertyChanged事件冒泡?
- 26. 在AWT事件模型中冒泡?
- 27. jquery中的事件冒泡问题
- 28. 事件冒泡和“这个”古怪
- 29. 在javascript中冒泡的逆向事件
- 30. 冒泡一个CSS动画事件
听起来很有趣。希望看到实施。 – 2008-10-20 02:55:56