zoukankan      html  css  js  c++  java
  • 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讲解的很详细及解决办法
    
    



     
     
    分享到: 更多
  • 相关阅读:
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    tctip demo页面>
    sql 随笔
  • 原文地址:https://www.cnblogs.com/haisa/p/2266530.html
Copyright © 2011-2022 走看看