2012-04-04 9 views
8

以下XAML定義されたウィンドウと仮定:ヘッダテンプレートのコードがコメントアウトされていない場合、DataTypeSelectorではないItemTemplateSelectorをWPF ListViewのHeaderTemplateと一緒に使用するにはどうすればよいですか?

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; 
    } 
    } 

<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> 

そして、このような背後にあるコードで定義されDataTemplateSelectorをもうと呼ばれる。 DataTemplateSelectorHeaderTemplateを同時に指定するにはどうすればよいですか?

+3

+1インラインXMLデータを使用してサンプルの優れた準備のため。それを直接使用して、あなたの問題が何であるかを確認できました! – SvenG

答えて

7

あなたがしようとしているのは、単一のGridViewColumnとそのヘッダーをスタイルすることだと思います。 だから、GridViewColumn定義にListViewコントロールからTemplateSelectorを移動:

<Grid> 
    <ListView ItemsSource="{Binding Source={StaticResource XmlData}, XPath='/Items/Item'}"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Width="Auto" CellTemplateSelector="{StaticResource TypeSelector}" HeaderTemplate="{StaticResource HeaderTemplate}"/> 
    </GridView> 
    </ListView.View> 
    </ListView> 
</Grid> 
+0

ありがとう - それは私の神経に乗っていた。 – Pascal

関連する問題