Эта проблема обычно решается с помощью Regions и RegionManager. В главном окне ViewModel создается набор регионов и добавляется в RegionManager. Затем ViewModels можно разрешить и добавить в коллекцию Region.Views.
В XAML Регион обычно внедряется с помощью свойства ItemsSource элемента ItemsControl, связанного со свойством region основной модели представления.
Итак, на главном экране ViewModel у вас будет что-то вроде этого:
public class TestScreenViewModel
{
public const string MainRegionKey = "TestScreenViewModel.MainRegion";
public TestScreenViewModel(IUnityContainer container, IRegionManager regionManager)
{
this.MainRegion = new Region();
regionManager.Regions.Add(MainRegionKey, this.MainRegion);
}
public Region MainRegion { get; set; }
}
Это обычно разрешается в вашем IModule
#region IModule Members
public void Initialize()
{
RegisterViewsAndServices();
var vm = Container.Resolve<SelectorViewModel>();
var mainScreen = Container.Resolve<TestScreenViewModel>();
mainScreen.MainRegion.Add(vm);
var mainView = ContentManager.AddContentView("Test harness", mainScreen);
}
#endregion
И XAML-представление вашего шаблона выглядит примерно так:
<DataTemplate DataType="{x:Type TestModule:TestScreenViewModel}">
<ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
<StackPanel>
<ItemsControl ItemsSource="{Binding Path=MainRegion.Views}" />
</StackPanel>
</ScrollViewer>
</DataTemplate>