我有一个包含多种类型的视图模型的 ObservableCollection,我想为每个 GridViewColumn 的 CellTemplates 中的每种类型创建一个 DataTemplate。在这个简单的示例中,我可以创建一个基本 ViewModel,但我希望能够仅从 xaml 执行此操作。下面的 xaml 显示了我正在尝试做的事情,其中一个 DataTemplate 将用于每个 CellTemplate。
如果有一个 GridViewColumn.Resources 我会在那里定义 DataTemplates 然后在 CellTemplate 中使用带有 ContentPresenter 的 DataTemplate,但我显然不能这样做。我想我可能需要一个 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>