Ho una ObservableCollection che contiene i modelli di visualizzazione di più tipi e vorrei creare un DataTemplate per ogni tipo all'interno di ogni CellTemplates del mio GridViewColumn. In questo semplice esempio potrei creare un ViewModel di base, ma mi piacerebbe poterlo fare solo da xaml. L'xaml qui sotto mostra cosa sto cercando di fare, dove uno dei DataTemplates dovrebbe essere usato per ogni CellTemplate.DataTemplate per ogni DataType in GridViewColumn CellTemplate
Se esistesse una GridViewColumn.Resources, definirò i DataTemplate quindi utilizzerò un DataTemplate con ContentPresenter nel CellTemplate, ma ovviamente non posso farlo. Sto pensando che potrebbe essere necessario un TemplateSelector, ma non sono sicuro da dove cominciare.
<ListView ItemsSource={Binding GenericObservableCollection>
<ListView.View>
<GridView>
<GridViewColumn Header="Type">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type vm:ActionInputViewModel}">
<TextBlock Text="Input"/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ActionOutputViewModel}">
<TextBlock Text="Output"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Value">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type vm:ActionInputViewModel}">
<TextBlock Text="{Binding Property1}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ActionOutputViewModel}">
<TextBlock Text="{Binding Property2}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Perfetto. Grazie per aver fornito risposte dettagliate per entrambi gli approcci che avevo considerato. – scuba88
Geez, ero così vicino dopo aver agitato per ore, ma l'hai inchiodato. Il mio errore era che stavo legando il 'DataContext' del' ContentControl', in contrasto con il 'Content' come si indica correttamente. Complimenti e grazie. –
Mi piace quando le persone passano del tempo nella loro risposta. È evidente nei dettagli che hai fornito. Bel lavoro. +1. – cplotts