Reputation: 196499
I have multiple layers in an application and i find myself having to bubble up events to the GUI layer for doing status bar changes, etc . . I find myself having to write repeated coded where each layer simply subscribes to events from the lower layer and then in the call back simply raise an event up the chain. Is there a more efficient way of doing this?
Upvotes: 30
Views: 17359
Reputation: 44307
Have a read of Jeremy Miller's blog "The Shade Tree Developer", especially his Write Your Own CAB series - the command pattern stuff he talks about there is probably what you need.
Upvotes: 3
Reputation: 11471
Peter Rilling has posted a way of simulating Event Bubbling/Broadcasting in winforms. It is simple and effective.
http://www.codeproject.com/KB/cs/event_broadcast.aspx
Upvotes: 3
Reputation: 136613
Unless I see a bit more of the design.. it'll be hard to give a good answer.
WPF does bubble events up (automatically) the UI Component/Control tree... this has now been built into the framework. So I guess that's the recommended way :)
The trouble with bypassing the middle man Layer2 is that Layer1 and Layer3 now know each other... are coupled. So its a tradeoff.. if you are okay with the coupling.. eliminate the middle man / invent a specialized component with this responsibility. However if you expect Layer 3 to be hot-swappable (low coupling), I'd say continue bubbling.
Upvotes: 1
Reputation: 204139
If all you're doing is firing an event handler from another event handler, you can cut out the middle man and hook the event handlers directly in the add/remove blocks for the event.
For example, if you have a UserControl with a "SaveButtonClick" event, and all you want to do when is call the event handler when the "SaveButton" on your UserControl is clicked, you can do this:
public event EventHandler SaveButtonClick
{
add { this.SaveButton.Click += value; }
remove { this.SaveButton.Click -= value; }
}
Now you don't need any code to fire the SaveButtonClick event - it will automatically be fired when the SaveButton.Click event is raised (ie when someone clicks that button).
Upvotes: 36
Reputation: 1441
You can have a central channel that only support events. This channel must be independent so the layer only publish or subscribe to it.
Upvotes: 0