Come posso modificare i modelli di articoli e contenuti in base al tipo di oggetto?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Ho un TabControl di WPF che ho impostato ItemTemplate e ContentTemplate . Questo controllo a schede visualizza le informazioni del registro chiamate basate sulle informazioni di supporto tecnico del cliente.

All'interno di questo stesso controllo, vorrei anche essere in grado di mostrare un modello ReturnAuthorization .

Vorrei scambiarli in base al tipo di oggetto aggiunto alla raccolta Articoli del TabControl . È qualcosa che è possibile?

Ho alcuni pseudo-codici che mostrano in qualche modo ciò che voglio realizzare:

<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>
È stato utile?

Soluzione

Un modo per farlo è usare qualcosa come un ItemTemplateSelector , che puoi impostare su TabControl. Tuttavia, se hai solo bisogno dei diversi modelli all'interno di TabControl e sai quali sono tutti in anticipo, puoi semplicemente lasciarli automaticamente può essere applicato utilizzando 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top