По-хорошему Вам следует создать DialogService, у которого будет метод Show(BaseViewModelType viewModel) и инжектить этот сервис в нужные места. Здесь Вам поможет IoC (DI-контейнер, если конкретнее).
Есть, конечно и другие способы. События, например. У Вашей ViewModel должно быть событие (Action), на которое подпишется главное окно, например, и будет на него соответственно реагировать.
Представления для конкретной ViewModel в обоих случаях можно описывать как DataTemplate и биндить отображаемую ViewModel к ContentPresenter, который сам найдет подходящий Template по типу ViewModel