The approach should work for both shared view model and those with separation.
Your views should be implemented as separate controls and bound to an instance of the appropriate data source. You do this by creating a user control and then setting the DataContext
of the control to a new instance of the intended view model type.
Within your main window, build your regions layout using whatever makes most sense, I'd presume a grid with rows and columns.
Next add instances of each of your views and locate them where necessary within your panel. The views will by default have the data source you gave them when you built them, so they all have a view model instance already.
If you want to share a single view model then create an instance in the main window as a resource and set the DataContext
on each view to that resource.
If separate view models, either take the default ones created by the views or create new instances as resources and bind them - again in the main window.