Comment puis-je utiliser un ItemTemplateSelector avec un HeaderTemplate dans un WPF ListView?
Supposons que le code XAML suivant défini fenêtre:
<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>
Et un DataTemplateSelector
défini dans le code-behind, comme ceci:
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;
}
}
Si le code pour le modèle d'en-tête n'est pas commenté, le DataTypeSelector n'est pas appelée plus. Comment puis-je spécifier un DataTemplateSelector
et HeaderTemplate
en même temps?
+1 pour l'excellente préparation de votre échantillon avec la ligne de Données XML. Pourrait utiliser directement et vérifier ce que votre problème est !!!
OriginalL'auteur Pascal | 2012-04-04
Vous devez vous connecter pour publier un commentaire.
Je pense que ce que vous essayez de faire est de style unique GridViewColumn et son en-Tête.
Déplacez l'TemplateSelector à partir de la liste de la GridViewColumn définition:
OriginalL'auteur SvenG