Come posso modificare i modelli di articoli e contenuti in base al tipo di oggetto?
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>
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>