Here is a more recent attempt I have implemented to solve this problem, having seen this thread resurface.
As per Stefan’s original advice, it relies solely on the pattr system (as all good Max patches should…)
The only ‘flaw’ I can spot offhand is the preset in the child patcher (loaded into the bpatcher) is recalled after some arbitrary length of time (500ms in this case). It would be safer to have the child patcher send a bang out an outlet, then use this to recall the preset (i.e. once you are sure the child patcher has loaded).
Again, as mentioned previously, you should only use dynamic bpatchers to load UI type patches. Couple this with a poly~ to load to corresponding dsp sections.
Zip contains three patches (parent, dials and sliders) and their corresponding json files (for the pattrstorage objects) to demonstrate dynamic switching in action.
Of course, the whole job could be made much easier if one could bind a pattr object to the @name attribute of a bpatcher….