Giả sử cửa sổ XAML sau định nghĩa:Làm thế nào để sử dụng một ItemTemplateSelector cùng với một HeaderTemplate trong một ListView WPF?
<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>
Và một DataTemplateSelector
quy định tại mã đằng sau như thế này:
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;
}
}
Nếu mã cho mẫu tiêu đề không được nhận xét ra, các DataTypeSelector không phải là được gọi nữa. Làm cách nào để chỉ định DataTemplateSelector
và HeaderTemplate
cùng một lúc?
+1 cho việc chuẩn bị tuyệt vời của mẫu của bạn với nội tuyến dữ liệu XML. Có thể sử dụng trực tiếp và kiểm tra xem vấn đề của bạn là gì !!! – SvenG