AvalonDock MVVM динамический просмотр - PullRequest
0 голосов
/ 07 мая 2019

Я использую 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>

Как я могу изменить это, чтобы получить динамическое представление на основе соответствующей модели представления?

1 Ответ

0 голосов
/ 07 мая 2019

Представление для просмотра модели обычно представляет собой сопоставление «один к одному», поэтому просто добавьте множество DataTemplate s ... либо из xaml, либо из кода, либо их комбинации (xaml на модуль и код в инициализатор модулей для объединения модуля ResourceDictionary в приложение).

...