この問題は通常、リージョンと RegionManager を使用して解決されます。メイン ウィンドウの ViewModel で、Region のセットが作成され、RegionManager に追加されます。その後、ViewModel を解決して Region.Views コレクションに追加できます。
XAML では、Region は通常、ItemsControl の ItemsSource プロパティをメインの ViewModel の 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>