What is the industry standard way to communicate effectively between widgets please?

You need a separate helper class for different delegate signatures.
Each helper has one event and one delegate.

No, every time you need to bind an event to a delegate, you need to create a new helper object that will allow you to pass a “reference to the delegate” through the interface.

This is a reference to a specific widget, but any class that (must) implement the helper delegate interface.