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 ,否则会显示错误,只显示类名。

0U{XD(6%{8{_0RA9WP05`0D图1.

 

而在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类似的绑定的办法,见
By Florin Badea一文,英文的,Badea讲解的很详细及解决办法

 




 

 

 

 
posted @ 2011-11-28 17:34  梦回千秋云断  阅读(358)  评论(0编辑  收藏  举报