鼓泡事件。
我在应用程序中有多个层,我发现自己必须将事件冒泡到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中的事件冒泡/广播的方法。 它简单而有效。
阅读Jeremy Miller的博客“The Shade Tree Developer”,特别是他自己写的CAB系列 – 他谈到的命令模式可能就是你所需要的。
除非我看到更多的设计……否则很难给出一个好的答案。
WPF确实向(自动)UI组件/控制树泡沫事件…现在已经内置到框架中。 所以我猜这是推荐的方式:)
绕过中间人Layer2的麻烦是Layer1和Layer3现在彼此了解……是耦合的。 所以这是一个权衡..如果你对耦合没问题的话。消除中间人/发明一个有这个责任的专门组件。 但是,如果您希望第3层可以热插拔(低耦合),我会说继续冒泡。
您可以拥有仅支持事件的中央通道。 此通道必须是独立的,因此图层仅发布或订阅它。
看看Update Controls .NET 。 这些控件甚至可以通过业务逻辑层发现它们依赖的数据模型部分。 您不必编写任何代码来通知它们。
- System.Web.Script.Serialization.JavaScriptSerializer或System.Runtime.Serialization.Json.DataContractJsonSerializer?
- SelectMany以展平嵌套结构
- ASP MVC文件上传HttpPostedFileBase是空的
- 反序列化XML,如何访问属性?
- WPF – 将UserControl的可见性绑定到属性
- 添加Web引用时,Acces拒绝路径
- TPL Dataflow仅在完成所有源数据块时保证完成
- 如何深度复制类而不将其标记为Serializable
- 自定义DataAnnotationsModelMetadataProvider无法正常工作