Давайте просто вызовем элемент управления, который встраивает пользовательский элемент управления MainWindow и пользовательский элемент управления UserControl. Поскольку вы находитесь в шаблоне MVVM, у вас есть по крайней мере одна модель представления для внешнего представления - я обычно использую имя MainVm.
У вас есть два варианта для пользовательского элемента управления: они могут использовать одну и ту же модель представления, или у вас может быть модель вспомогательного представления, только для UserControl, т.е.
Для вашего первого выбора вы ничего не делаете. Вы определяете UserControl (Visual Studio «Добавить новый элемент» -> «Управление пользователем» - довольно хорошее начало). Затем вы просто встраиваете его в главное окно.
<Window
x:Class="SO.MainWindow"
...
xmlns:src="clr-namespace:SO"
...
>
...
<src:UserControl />
...
</Window>
UserControl унаследует тот же DataContext от MainWindow и выполнит все {Binding}, как вы бы сделали в MainWindow.
Если вы хотите иметь модель подчиненного представления (UserVm) - это обычно будет публичное свойство MainVm (скажем, userVm). В этом случае вы будете устанавливать DataContext из UserControl при обращении к нему.
<src:UserControl DataContext="{Binding Path=userVm}" />
Другой популярной парадигмой было бы объявление DataTemplate вместо UserControl. Если вы сделаете это, вам просто нужно поместить UserVm (либо создать его экземпляр в XAML, либо с помощью привязки):
<Window x:Class="MainWindow" ...>
<Window.Resources>
<DataTemplate x:Key="UserDt"> <!-- or user TargetType instead of x:Key -->
...
</DataTemplate>
</Window.Resources>
...
<!-- You can put in a ContentControl like here: -->
<ContentControl Content="{Binding Path=userVm}"
ContentTemplate="{StaticResource UserDt}" />
<!-- or, if you defined TargetType for the DT, you can simply instantiate
the sub VM here. I don't like this apporach but it exists. -->
<src:UserVm />
</Window>