Como faço para usar um ItemTemplateSelector junto com um HeaderTemplate em um ListView do WPF?
Suponha que a seguinte janela definida por 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>
E umDataTemplateSelector
definido no código por trás como este:
<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>
Se o código para o modelo de cabeçalho não estiver comentado, o DataTypeSelector não será chamado mais.Como eu especifico umDataTemplateSelector
eHeaderTemplate
ao mesmo tempo?