在Silverlight中,我们的数据列表显示控件有ListBox、DataGrid等。对于显示出来的数据条目样式外观的管理是通过DataTemplate(数据模板)来完成的。本节将从DataTemplate基础说起如何使用DataTemplate。

  首先我们准备数据源如下:

    /// <summary>/// 文章Model/// </summary>public class ArticleModel{public string ArtName { get; set; }public string ArtContent { get; set; }public string ArtAuthor { get; set; }public string ArtUpdateTime { get; set; }}/// <summary>/// 文章列表/// </summary>public class ArtList{public ArtList(){ArticleList = new List<ArticleModel>();ArticleList.Add(new ArticleModel() { ArtName = "成都", ArtContent = "天府之国", ArtAuthor = "leung", ArtUpdateTime = "2012-04-05 11:12:36" });ArticleList.Add(new ArticleModel() { ArtName = "上海", ArtContent = "翡翠明珠", ArtAuthor = "aiLen", ArtUpdateTime = "2012-05-16 21:32:10" });ArticleList.Add(new ArticleModel() { ArtName = "广州", ArtContent = "沿海城市",ArtAuthor = "minghe", ArtUpdateTime = "2012-01-17 05:01:45" });ArticleList.Add(new ArticleModel() { ArtName = "西藏", ArtContent = "高原城市", ArtAuthor = "weifeng", ArtUpdateTime = "2012-03-22 09:30:14" });}/// <summary>/// 文章列表属性/// </summary>public List<ArticleModel> ArticleList { get; set; }}

  如何在前台控件中绑定数据源呢?如同上一节所述,设置一个静态资源

    //引用域名空间
   xmlns:local="clr-namespace:SLDataTemplate"//初始化为静态资源
      <UserControl.Resources><local:ArtList x:Key="SourceList"></local:ArtList></UserControl.Resources>//设置为数据上下文
    <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource SourceList}">//设置数据源绑定
        <ListBox  x:Name="lbArt" ItemsSource="{Binding ArticleList}" /></Grid>

  其次以ListBox为例,在本文中有三种方式:

    一、在ListBox.ItemTemplate中直接添加DataTemplate。

        <ListBox  x:Name="lbArt" ItemsSource="{Binding ArticleList}"  Width="350"Height="300" HorizontalAlignment="Left" VerticalAlignment="Top" ><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding ArtName}"></TextBlock><TextBox Text="{Binding ArtContent}"></TextBox><TextBox Text="{Binding ArtAuthor}"></TextBox><TextBlock Text="{Binding ArtUpdateTime}"></TextBlock></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox>

    二、将DataTemplate作为Resources,ListBox中属性 ItemTemplate="{StaticResource lbTmp}"引用。

    <UserControl.Resources><DataTemplate x:Key="lbTmp"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding ArtName}"></TextBlock><TextBox Text="{Binding ArtContent}"></TextBox><TextBox Text="{Binding ArtAuthor}"></TextBox><TextBlock Text="{Binding ArtUpdateTime}"></TextBlock></StackPanel></DataTemplate></UserControl.Resources>

        <ListBox x:Name="lbRes" ItemsSource="{Binding ArticleList}" ItemTemplate="{StaticResource lbTmp}" Margin="370 0 0 0 "HorizontalAlignment="Left" VerticalAlignment="Top"Width="350" Height="300" ></ListBox>

    三、将DataTemplate在后台代码编写,然后在后台代码中指定。

     //前台代码
       <ListBox x:Name="lbCsRet" Margin="0 370 0 0 " HorizontalAlignment="Left"VerticalAlignment="Top" Width="350" Height="300" ></ListBox>

     //后台代码public MainPage(){InitializeComponent();DataTemplate dtemp = GetTemplate();this.lbCsRet.ItemTemplate = dtemp;this.lbCsRet.ItemsSource = new ArtList().ArticleList;}private DataTemplate GetTemplate(){string xamlString = @"<DataTemplate       xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""   xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""><StackPanel Orientation=""Horizontal""><TextBlock Text=""{Binding ArtName}""></TextBlock><TextBox Text=""{Binding ArtContent}""></TextBox><TextBox Text=""{Binding ArtAuthor}""></TextBox><TextBlock Text=""{Binding ArtUpdateTime}""></TextBlock></StackPanel>   </DataTemplate>";return (DataTemplate)XamlReader.Load(xamlString);}

    最后我们可以看看同样在DataGrid中使用DataTemplate。

        <sdk:DataGrid ItemsSource="{Binding ArticleList}" Margin="370 370 0 0 "HorizontalAlignment="Left" VerticalAlignment="Top" Width="350" Height="300" AutoGenerateColumns="False" ><sdk:DataGrid.Columns><sdk:DataGridTemplateColumn Header="列表" CellTemplate="{StaticResource lbTmp}"></sdk:DataGridTemplateColumn></sdk:DataGrid.Columns></sdk:DataGrid>

  下面我们来看看运行效果,如需源码请点击 SLDataTemplate.zip 下载。

  

转载于:https://blog.51cto.com/chengxingliang/855588

Silverlight实用窍门系列:65.Silverlight的数据模板DataTemplate(一)使用数据模板相关推荐

  1. Silverlight实用窍门大集合+Silverlight 5 最全新特性【目录索引】

    在最近的几个月内整理出了Silverlight的一些相关的比较实用的功能讲解文章,并且随着Silverlight 5 beta版本的发布整理出的新特性系列文章,在这里做一个总的概括和索引,以方便大家观 ...

  2. Silverlight实用窍门系列:59.多个中心点联动多线的可拖动控件扩展为拓扑图

    在本系列的第17篇文章中"Silverlight实用窍门系列:17.中心点联动多线的可拖动控件(绘制工程图.拓扑图基础) ",制作了基本的中心联动图标.有园友对此图的扩展不是很清晰 ...

  3. Silverlight实用窍门系列:71.Silverlight的Style

    此文章实例基于Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary,如有数据源疑问请参考该文章. 在Silverlight中的Style相当于 ...

  4. Silverlight实用窍门系列:58.Silverlight中的Binding使用(三)-数据集合绑定

      在本文中将以ListBox为例讲述在Silverlight中Binding数据集合. 在这里我们将实体集的绑定分为三类:    一.直接控件绑定.    二.DataTemplate模板绑定.   ...

  5. Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件...

    在Silverlight中我们使用了数据模板,在很多时候也需要获取到数据模板上的控件,并且进行改变.本文使用的实例数据源和上节相同,如需了解请下载源码查看. 当然在这里我们可以分为获取数据模板原始控件 ...

  6. Silverlight实用窍门系列:35.细解Silverlight冒泡路由事件和注册冒泡路由事件【附带实例源码】...

    Silverlight中的事件分为普通事件和冒泡路由事件,它并没有包括WPF中的隧道路由事件,在本章中将详细讲解冒泡路由事件和如何注册一个冒泡路由事件. 一.细解冒泡路由事件 冒泡路由事件可以比喻为: ...

  7. Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】...

    在Silverlight程序(非Out of Browser模式)中是无法直接调用DLL的,但是很多的计算或者其他应用程序的调用中我们需要用到DLL的加载.比如调用DLL来识别身份证读卡器传输过来 ...

  8. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  9. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

    本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...

最新文章

  1. 皮一皮:这样的女生还有吗?
  2. openssl 生成证书相关符号意义
  3. sql批量修改字段内容的语句-SQL技巧
  4. 3dmark for android,Android版3DMark首测
  5. restful api php,RestfulAPI · ThinkPHP6.0接口开发与应用及uniapp快速入门(更新完毕) · 看云...
  6. jquery中的attr函数attr(name)、attr(key,value)、attr(properties)、attr(key,fn)、removeAttr
  7. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-1.常用的第三方支付和聚合支付介绍...
  8. Kafka从上手到实践 - 庖丁解牛:Partition | 凌云时刻
  9. 如何修改dns服务器ip,如何修改DNS服务器IP地址
  10. mac上的android模拟器下载安装,Mac电脑上安装安卓模拟器,Mac如何安装Android模拟器...
  11. 闪存flash进阶知识
  12. 用友U8+V13.0安装步骤
  13. 转载:Python中to_csv函数输出的utf8数据用Excel打开是乱码
  14. matlab图片测量尺寸_基于MATLAB的不规则面积图像测量
  15. 功能安全-三种确认措施报告之安全评估报告学习记录
  16. forward() takes 2 positional arguments but 3 were given
  17. 使用FreeMarker自动生成Word文档
  18. 电商翻身受宠社交成大势 2019上市科技股大盘点
  19. winform 异步加载控件屏幕一闪一闪亮晶晶解决
  20. 电动口罩电路图和源代码程序破解

热门文章

  1. MySQL免安装版,遇到MSVCR120.dll文件丢失错误的解决方案
  2. sharepoint试图筛选等于本人
  3. C# 用tabcontrol实现窗体类似网页排版的显示
  4. C++使用命名空间中成员的三种方式
  5. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]
  6. Redis学习资料整理
  7. 解决无法使用pip命令加载Python的扩展库问题
  8. 异常处理:Mybatis报错:There is no getter for property named ‘xxxx‘ in ‘class xxx‘
  9. windows安装gnvm安装教程,node多版本解决方案
  10. 虚拟机忘记密码解决方法