这个问题通常使用 Regions 和 RegionManager 来解决。在主窗口 ViewModel 中,创建了一组区域并将其添加到 RegionManager。然后 ViewModels 可以被解析并添加到 Region.Views 集合中。
在 XAML 中,通常通过将 ItemsControl 的 ItemsSource 属性绑定到主 ViewModel 的 region 属性来注入 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>