¿Cómo uso un ItemTemplateSelector junto con un HeaderTemplate en un ListView de WPF?
Supongamos que la siguiente ventana definida XAML:
<code><Window x:Class="LayoutTests.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:LayoutTests" Title="Window1"> <Window.Resources> <XmlDataProvider x:Key="XmlData" IsInitialLoadEnabled="True"> <x:XData> <Items xmlns=""> <Item text="Item 1" type="A" /> <Item text="Item 2" type="B" /> <Item text="Item 3" type="A" /> </Items> </x:XData> </XmlDataProvider> <DataTemplate x:Key="TypeATemplate"> <TextBlock Text="{Binding XPath=./@text}" Foreground="Red"/> </DataTemplate> <DataTemplate x:Key="TypeBTemplate"> <TextBlock Text="{Binding XPath=./@text}" Foreground="Green"/> </DataTemplate> <DataTemplate x:Key="HeaderTemplate"> <TextBlock Text="A Header"/> </DataTemplate> <local:TypeSelector x:Key="TypeSelector" TypeATemplate="{StaticResource TypeATemplate}" TypeBTemplate="{StaticResource TypeBTemplate}"/> </Window.Resources> <Grid> <ListView ItemsSource="{Binding Source={StaticResource XmlData}, XPath='/Items/Item'}" ItemTemplateSelector="{StaticResource TypeSelector}"> <!--<ListView.View> <GridView> <GridViewColumn Width="Auto" HeaderTemplate="{StaticResource HeaderTemplate}"/> </GridView> </ListView.View>--> </ListView> </Grid> </Window> </code>
Y unDataTemplateSelector
definido en el código detrás de esta manera:
<code> public class TypeSelector : DataTemplateSelector { public DataTemplate TypeATemplate { get; set; } public DataTemplate TypeBTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { var element = item as XmlElement; if (element.Attributes["type"].Value == "A") return TypeATemplate; else return TypeBTemplate; } } </code>
Si el código de la plantilla de encabezado no está comentado, ya no se llama al DataTypeSelector.¿Cómo especifico unDataTemplateSelector
yHeaderTemplate
¿al mismo tiempo?