Это звучит так, как будто вы должны смотреть на WPT DataTemplates.
Возьмите этот пример XAML основан на ваш вопрос:
<Grid>
... XAML for your Header and Footer
<ContentPresenter Content="{Binding MainContent">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type viewmodel:UserControlViewModel}">
<view:UserControlView>
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
Здесь я использую ContentPresenter выступать в качестве заполнителя для вашего контента. Это связано с свойством, называемым MainContent
, на вашей основной модели. В вашей модели просмотра вы можете установить MainContent как viewmodel для вашего пользовательского контроля.
ContentPresenter
попытается отобразить любой объект, к которому он привязан. В этом примере я создал DataTemplate, который сопоставляет конкретный тип объекта (например, UserControlViewModel) с представлением (например, UserControlView).
Вы можете определить несколько DataTemplates, чтобы ваш контент выступающему работать с несколькими ViewModels (или любой тип объекта):
<Grid>
... XAML for your Header and Footer
<ContentPresenter Content="{Binding MainContent">
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type viewmodel:UserControlViewModel}">
<view:UserControlView>
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodel:AnotherUserControlViewModel}">
<view:AnotherUserControlView>
</DataTemplate>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
Я надеюсь, что очков вы в правильном направлении.
Вы можете узнать более подробную информацию о Templating данных на MSDN:
https://msdn.microsoft.com/en-us/library/ms742521(v=vs.110).aspx
EDIT: Стоит отметить, что вы МОГ только новый вверх ваш UserControl.xaml в главном ViewModel и установить это свойство MainContent. Там не требуется DataTemplate, поскольку ContentPresenter знает, как представить UserControl. Однако это противоречит MVVM, так как вы тесно связываете свой UI (XAML) с кодом (viewmodel).
Ваш последний момент - это то, с чем я сейчас работаю. Я разработал способ использования «DialogHelper», который создает «CustomDialogView: Window». Содержимое этого диалогового окна может быть одним из трех (или более) 'UserControl'. Поэтому вместо очередности пользовательского элемента управления в ViewModel (как я это делаю сейчас) я мог бы использовать строку и иметь все пользовательские элементы управления в «Window.Resources». Как это звучит? Я просто должен понять, как это сделать. – IAbstract