У меня есть ObservableCollection, который содержит модели представлений нескольких типов, и я хотел бы сделать DataTemplate для каждого типа в каждом из моих GridViewColumn CellTemplates. В этом простом примере я мог бы создать базовый ViewModel, но я хотел бы сделать это только с xaml. В приведенном ниже примере xaml показано, что я пытаюсь сделать, когда один из DataTemplates будет использоваться для каждого CellTemplate.
Если бы были GridViewColumn.Resources, я бы определил DataTemplates там, затем использовал DataTemplate с ContentPresenter в CellTemplate, но я, очевидно, не могу этого сделать. Я думаю, мне может понадобиться TemplateSelector, но я не уверен, с чего начать.
<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>