No DataType in DataTemplate in Windows Phone(二)
上文No DataType in DataTemplate in Windows Phone(—)中我们说到Windows Phone中有些特性被limited,如DataTemplate中的DataType,其实不只DataType,DataTemplate中的Trigger也不被支持。我们这篇文章从实际代码开始分析。
看WPF的写法:
<Window.Resources> <local:Company x:Key="dataCompany" /> <DataTemplate DataType="{x:Type local:User}" > <StackPanel Orientation="Horizontal" > <TextBlock Text="{Binding UserID}" x:Name="userid"/> <TextBlock Text=" Name: "/> <TextBlock Text="{Binding UserName}" /> </StackPanel> <DataTemplate.Triggers> <DataTrigger Binding="{Binding UserID}" Value="2"> <Setter TargetName="userid" Property="Foreground" Value="Red" /> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> <local:Company x:Key="UserList" > <local:User UserID="1" UserName="pan" /> <local:User UserID="2" UserName="qiao" /> <local:User UserID="3" UserName="zhu" /> </local:Company> </Window.Resources>
ListBox绑定代码如下:<ListBox Height="193" HorizontalAlignment="Left" Margin="49,81,0,0" Name="listBox1" VerticalAlignment="Top" Width="181" ItemsSource="{StaticResource UserList}" /> 我们看到ListBox中没有使用ItemTemplate去绑定DataTemplate,而结果却按我们要求的正常显示,如图1.注意:<DataTemplate DataType="{x:Type local:User}" > 此处要绑定的是User类而不是Company ,否则会显示错误,只显示类名。
而在Windows Phone中DataTemplate 是没有DataType的,也没有Trigger属性。OK,那我们如果想让调用User类作Items控件的Item时,想像WPF那样让它自动绑定怎么办呢?难道必须每个DataTemplate都要定义一个x:Key,然后每个ItemsCrontrol做一下绑定?
先看Windows Phone中的DataTemplate:
<DataTemplate x:Key="listDataTemplate"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding UserID}" /> <TextBlock Text=" Name: "/> <TextBlock Text="{Binding UserName}" /> </StackPanel> </DataTemplate>
ListBox绑定语句: ---此处绑定的是上级的DataContext<ListBox ItemTemplate="{StaticResource listDataTemplate}" Height="296" HorizontalAlignment="Left" Margin="39,86,0,0" Name="listBox1" VerticalAlignment="Top" Width="251" ItemsSource="{Binding}" />关于实现Windows Phone中实现DataType类似的绑定的办法,见