我在应用程序中有多个图层,我发现自己必须将事件冒泡到GUI层以进行状态栏更改等。 。我发现自己必须编写重复编码,其中每一层简单地订阅来自较低层的事件,然后在回调中简单地向上引发一个事件。有没有更有效的方法呢?
答案 0 :(得分:30)
如果您所做的只是从另一个事件处理程序触发事件处理程序,您可以删除中间人并将事件处理程序直接挂钩到事件的添加/删除块中。
例如,如果您有一个带有“SaveButtonClick”事件的UserControl,并且在单击UserControl上的“SaveButton”时调用事件处理程序时想要执行的操作,则可以执行以下操作:
public event EventHandler SaveButtonClick
{
add { this.SaveButton.Click += value; }
remove { this.SaveButton.Click -= value; }
}
现在您不需要任何代码来触发SaveButtonClick事件 - 当引发SaveButton.Click事件时(即当有人点击该按钮时)它会自动触发。
答案 1 :(得分:3)
阅读Jeremy Miller的博客“The Shade Tree Developer”,特别是他的Write Your Own CAB series - 他谈到的命令模式可能就是你需要的东西。
答案 2 :(得分:3)
Peter Rilling发布了一种模拟winforms中的事件冒泡/广播的方法。 它简单而有效。
答案 3 :(得分:1)
除非我看到更多的设计......否则很难给出一个好的答案。
WPF确实向(自动)UI组件/控制树泡沫事件...现在已经内置到框架中。所以我猜这是推荐的方式:)
绕过中间人Layer2的麻烦是Layer1和Layer3现在互相认识......是耦合的。所以这是一个权衡..如果你对联轴器没问题那么......消除中间人/发明一个有这个责任的专门组件。但是,如果您希望第3层是可热插拔的(低耦合),我会说继续冒泡。
答案 4 :(得分:0)
您可以拥有仅支持活动的中央频道。此频道必须是独立的,因此图层仅发布或订阅它。
答案 5 :(得分:0)
看看Update Controls .NET。这些控件通过业务逻辑层发现它们依赖的数据模型部分。您不必编写任何代码来通知他们。