此問題通常使用Regions和RegionManager解決。在主窗口ViewModel中,創建一組區域並將其添加到RegionManager。然後ViewModels可以被解析並添加到Region.Views集合中。
在XAML中,通常通過將ItemsControl的ItemsSource屬性綁定到主ViewModel的region屬性來注入區域。
因此,在主屏幕視圖模型,你會有這樣的事情:
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>
謝謝,我想我現在擁有它。我有一個 <用戶控制內容= {綁定MainViewModel}「/> 與DataTemplate應用適當的視圖來顯示它 把ViewModel類作爲UserControl的內容令我困惑; D – Kage 2009-11-15 21:12:10