WPF Неявный выбор шаблона с использованием DataTemplate, но за пределами «List» - PullRequest
1 голос
/ 24 августа 2011

В моем проекте у меня есть TreeView, который содержит дерево объектов различных типов (все подклассы одного и того же суперкласса).

Справа от моего TreeView я хотел бы иметь "панель" (на данный момент у меня есть только сетка), которая отображает информацию об объекте, выбранном в данный момент в дереве.Я хочу использовать DataTemplate, как во втором примере на этой странице , чтобы адаптировать макет и содержимое моей "панели" на основе типа подкласса;однако я не могу найти подходящий контейнер (так как мне не нужен элемент управления списком - я хочу изменить отображение для одного элемента на основе выбора в древовидном представлении).

Этот вопрос задает то же самое, но я не думаю, что ответ мне подходит, потому что я хочу, чтобы шаблон динамически изменялся в зависимости от типа.

Т.е. я надеялся на что-то вроде:

<[A Suitable Container] Margin="189,39,12,12" DataContext="{Binding ElementName=treeView1, Path=SelectedItem}">
<DataTemplate DataType="{x:Type local:subclass1}">
    <Grid>
        <!-- subclass1 specific stuff -->
    </Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:subclass2}">
    <Grid>
        <!-- subclass2 specific stuff -->
    </Grid>
</DataTemplate>
</[A Suitable Container]>

1 Ответ

5 голосов
/ 24 августа 2011

Используйте ContentControl

<ContentControl Content="{Binding ElementName=treeView1, Path=SelectedItem}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type local:ViewModelA}">
            <local:ViewA />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModelB}">
            <local:ViewB />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>
...