Comment modifier les modèles d'élément et de contenu en fonction du type d'objet?

StackOverflow https://stackoverflow.com/questions/1029324

  •  06-07-2019
  •  | 
  •  

Question

J'ai un TabControl WPF que j'ai défini le ItemTemplate ainsi que le ContentTemplate . Cet onglet affiche les informations du journal des appels en fonction des informations du support technique du client.

À l'intérieur de ce même contrôle, j'aimerais également pouvoir afficher un modèle ReturnAuthorization .

Je souhaiterais les échanger en fonction du type d'objet ajouté à la collection Items de TabControl . Est-ce quelque chose qui est possible?

J'ai un pseudo-code qui montre ce que je veux retirer:

<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>
Était-ce utile?

La solution

Une façon de procéder consiste à utiliser quelque chose comme ItemTemplateSelector , que vous pouvez définir sur TabControl. Toutefois, si vous n'avez besoin que des différents modèles dans TabControl et que vous savez ce qu'ils sont tous à l'avance, vous pouvez simplement les laisser automatiquement être appliqué à l'aide des 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top