Main principles is this: don't copy data from one control to another control
Instead, create a (tiny) data layer
. Populate all controls from data. When a control event is suppose to change some data, do it on your data layer, then send a notifications to other controls used by all controls to re-populate or adjust data presentation accordingly. That means, you control should play the role of listeners
or the observable
data structure. Even if you don't introduce those concept explicitly (which is recommended though), the design of the code should follow this or similar pattern.
I suggest you learn and analyze applicability of the following architectural patterns
MVVM — Model View View Model,
MVC — Model-View-Controller,
MVA — Model-View-Adapter,
MVP — Model-View-Presenter,
Pay attention for the motivation of those architectures. If you understand it, you would be able to create better design ideas.