Как изменить шаблоны элементов и содержимого в зависимости от типа объекта? - PullRequest
2 голосов
/ 23 июня 2009

У меня есть WPF TabControl, для которого я установил ItemTemplate, а также ContentTemplate. На этой вкладке отображается информация о журнале вызовов, основанная на информации службы технической поддержки.

Внутри этого элемента управления я также хотел бы показать шаблон ReturnAuthorization.

Я бы хотел поменять их на основе типа объекта, добавленного в коллекцию Предметов TabControl. Это то, что возможно?

У меня есть некоторый псевдокод, который показывает, что я хочу сделать:

<TabControl x:Name="tabCases" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{StaticResource ClosableTabItemTemplate}"  >
        <TabControl.ItemTemplate>
            if ( Type is Entities:Case )
            {
            <DataTemplate DataType="{x:Type Entities:Case}">
                    <TextBlock Text="{Binding Path=Id}" />
            </DataTemplate>
            }
            else if ( Type is Entities1:RAMaster )
            {
            <DataTemplate DataType="{x:Type Entities1:RAMaster}">
                <TextBlock Text="{Binding Path=Id}" />
                </DataTemplate>
            }
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate DataType="{x:Type Entities:Case}">
                <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" />
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>

1 Ответ

0 голосов
/ 23 июня 2009

Один из способов сделать это - использовать что-то вроде ItemTemplateSelector , которое вы можете установить в TabControl. Однако если вам нужны только разные шаблоны в TabControl и вы знаете, что они все опередили, вы можете просто применить их автоматически с помощью DataTypes.

<TabControl x:Name="tabCases" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{StaticResource ClosableTabItemTemplate}"  >
    <TabControl.Resources>

        <DataTemplate DataType="{x:Type Entities:Case}">
                <TextBlock Text="{Binding Path=Id}" />
        </DataTemplate>

        <DataTemplate DataType="{x:Type Entities1:RAMaster}">
            <TextBlock Text="{Binding Path=Id}" />
        </DataTemplate>

    </TabControl.Resources>
    <TabControl.ContentTemplate>
        <DataTemplate DataType="{x:Type Entities:Case}">
            <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>
...