DataTemplateSelector
是在XAML数据绑定中根据项目类型更改 ItemTemplates
的推荐方法。WP7没有内置 DataTemplateSelector
,WP8也没有内置。您需要在网上找到您喜欢的DataTemplateSelector
版本并使用它,或者只需编写自己的版本,因为它只需要大约5-10行代码。
WindowsPhoneGeek 上有一篇关于 自定义 WP7 中的 DataTemplateSelectors 的好文章,wp7nl 项目则基于该文章构建了DataTemplateSelector 基类。
<ListBox x:Name="listBox" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<local:FoodTemplateSelector Content="">
<local:FoodTemplateSelector.Healthy>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="YellowGreen" Width="400" Margin="10">
<Image Source="" Stretch="None"/>
<TextBlock Text="" FontSize="40" Foreground="Black" Width="280"/>
<TextBlock Text="healty" />
</StackPanel>
</DataTemplate>
</local:FoodTemplateSelector.Healthy>
<local:FoodTemplateSelector.UnHealthy>
<DataTemplate>
<Border BorderBrush="Red" BorderThickness="2" Width="400" Margin="10">
<StackPanel Orientation="Horizontal">
<Image Source="" Stretch="None"/>
<TextBlock Text="" FontSize="40" Width="280"/>
<Image Source="Images/attention.png" Stretch="None" Margin="10,0,0,0"/>
</StackPanel>
</Border>
</DataTemplate>
</local:FoodTemplateSelector.UnHealthy>
<local:FoodTemplateSelector.NotDetermined>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" Width="400" Margin="10">
<Image Source="" Stretch="None"/>
<TextBlock Text="" FontSize="40" Width="280"/>
<Image Source="Images/question.png" Stretch="None" Margin="10,0,0,0"/>
</StackPanel>
</DataTemplate>
</local:FoodTemplateSelector.NotDetermined>
</local:FoodTemplateSelector>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如果您正在寻找更快速且简单的解决方案,Prism的DataTemplateSelector不需要编写C#代码,因为它使用DataTemplateSelector.Resources集合来处理类型映射。两个DataTemplateSelector
类可以直接复制并在您的应用程序中使用。
1: <UserControl.Resources>
2: <DataTemplate x:Key="SelectorDataTemplate">
3: <prism:DataTemplateSelector Content=""
4: HorizontalContentAlignment="Stretch"
5: IsTabStop="False">
6: <prism:DataTemplateSelector.Resources>
7: <DataTemplate x:Key="DataType1">
8: <StackPanel Orientation="Horizontal">
9: <TextBlock Text=""/>
10: <toolkit:Separator />
11: <TextBlock Text="" />
12: </StackPanel>
13: </DataTemplate>
14:
15: <DataTemplate x:Key="DataType2">
16: <StackPanel Orientation="Horizontal">
17: <TextBox Text="" />
18: <toolkit:Separator />
19: <TextBox Text="" />
20: </StackPanel>
21: </DataTemplate>
22:
23: </prism:DataTemplateSelector.Resources>
24: </prism:DataTemplateSelector>
25: </DataTemplate>
26: </UserControl.Resources>
还有许多其他的 DataTemplateSelectors
,包括:Odyssey Phone,UIMessage 等等。