Я использую AvalonDock из пакета Xceed.Wpf.AvalonDock (версия 3.5). Менеджер стыковки - это часть моего основного обзора. Интересная часть здесь:
<xcad:DockingManager Name="_dockingManager" Grid.Row="1" DataContext="{Binding DockingManagerViewModel}"
DocumentsSource="{Binding Documents}"
AnchorablesSource="{Binding Anchorables}" >
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type vm:DockingWindowViewModel}">
<v:SampleDockWindowView />
</DataTemplate>
</xcad:DockingManager.Resources>
<xcad:DockingManager.LayoutItemContainerStyle>
<Style TargetType="{x:Type dockctrl:LayoutItem}" >
<Setter Property="Title" Value="{Binding Model.Title}" />
<Setter Property="CloseCommand" Value="{Binding Model.CloseCommand}" />
<Setter Property="CanClose" Value="{Binding Model.CanClose}" />
</Style>
</xcad:DockingManager.LayoutItemContainerStyle>
</xcad:DockingManager>
Таким образом, модель основного вида содержит наблюдаемую коллекцию (например, «Документы»), в которую можно динамически добавлять модели представления. Проблема в том, что у меня разные представления для разных моделей представлений, и они будут добавлены во время выполнения. В настоящее время представления извлекаются на основе шаблонов данных:
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type vm:DockingWindowViewModel}">
<v:SampleDockWindowView />
</DataTemplate>
</xcad:DockingManager.Resources>
Как я могу изменить это, чтобы получить динамическое представление на основе соответствующей модели представления?