继续更新Silverlight 5 Beta新特性.在Silverlight 5 BEta更新出来新特性中有一些是WPF已经存在的影子.类似前面提到的多窗体[Multiple Window Support].其实很多熟悉WPF同学应该能看到隐式模板[Implicit DataTemplates]也是借鉴WPF而来.Silverlight 4中DataTemplate在非UI项实现数据绑定模板可以多处重用.大大增加数据显示多样性提高重用的效率.当然在Silverlight 5 Beta增加了Implicit DataTemplate隐式模板.提供一些新的功能:

Silverlight 5 Implicit DataTemplate:
[1]ContentPresenter的DataTemplates可以选择基于某个数据类型进行相关联绑定
[2]隐式定义DataTemplates
[3]当数据源DataContent发生变化时.动态更新的ContentPresenter DataTemplate
[4]在适当范围启用的DataTemplates
 

类似我们现在定义一项需求:星级酒店推出系统中包含多个服务:RoomService[客房服务]/Communication[外接服务]当我们把服务绑定UI上供给用户选择时通常采用DataTemplate方式进行绑定呈现.这时一种简单通用的方式.定义服务的实体类:

  1. public class Room
  2. {
  3. public string RoomId { get; set; }
  4. public string RoomName { get; set; }
  5. public string RoomType { get; set; }
  6. }
  7. public class RoomService :Room
  8. {
  9. public string ServiceId { get; set; }
  10. public string ServiceName { get; set; }
  11. public double ServicePrice { get; set; }
  12. public DateTime ServiceDate { get; set; }
  13. }
  14. public class RoomCommunication : Room
  15. {
  16. public string CommClientID { get; set; }
  17. public int CommSpyCounter { get; set; }
  18. }

模拟提供数据源:

  1. public class VipRoom_Service
  2. {
  3. public static IList<Room> GetRoomServiceDataRecord()
  4. {
  5. List<Room> getDataRoomService = new List<Room>();
  6. getDataRoomService.Add( new Room {  RoomName="StandBy_Phone_Convert"});
  7. getDataRoomService.Add( new RoomService() { RoomName = "DUIUser_DataType_Room"});
  8. getDataRoomService.Add( new RoomService() { RoomName = "VIPService_DataType_Room"});
  9. getDataRoomService.Add( new RoomCommunication() { RoomName = "Communication_Client_Room" });
  10. return getDataRoomService;
  11. }
  12. }

定义需要数据绑定ViewModel:

  1. public class RoomService_ViewModel :INotifyPropertyChanged
  2. {
  3. public event PropertyChangedEventHandler PropertyChanged;
  4. public ObservableCollection<Room> serviceList=new ObservableCollection<Room>();
  5. public ObservableCollection<Room> ServiceList
  6. {
  7. get {return this.serviceList; }
  8. set {this.serviceList = value; }
  9. }
  10. public void SpiltHandleBaseDataList()
  11. {
  12. if (this.serviceList != null)
  13. {
  14. var getresult = VipRoom_Service.GetRoomServiceDataRecord();
  15. if (getresult.Count > 0)
  16. {
  17. foreach (Room getService in getresult)
  18. serviceList.Add(getService);
  19. }
  20. }
  21. }
  22. }

在UI呈现中做数据绑定:

  1. <Grid x:Name="LayoutRoot" Background="White" Margin="30" >
  2. <TextBlock Text="This Common DataBind About Itemlist!" FontSize="14"></TextBlock>
  3. <ListBox   HorizontalAlignment="Center" VerticalAlignment="Center"
  4. ItemsSource="{Binding ServiceList}"
  5. ScrollViewer.VerticalScrollBarVisibility="Visible"
  6. Margin="167,47,172,112" Width="401" Height="181"></ListBox>
  7. </Grid>

这种方式很简单直接把需要所有服务主题提供了给了用户.:

但是系统需求发生变化后 我们需要在酒店服务系统需要提供订飞机票服务时.你会发现这种方式呈现使我们的DataBinding的数据源发生变化.在代码改动代价上前段UI和后台数据绑定都需要修改.这让人情何以堪.而今天提到Silverlight 5 Beta中隐式模板则彻底解决这个问题.

当我们在同一个数据加入N数据服务实体对象[存在FirstEntity/SecendEntity/ThreeEntit…N个] 因此我们需要要更加智能化.在数据源发生变动后.前段绑定数据UI能够根据数据源来进行自动识别绑定.而这就是Implicit Template隐式模板所做的工作.定义Template:

  1. <UserControl.Resources>
  2. <DataTemplate DataType="model:Room">
  3. <TextBlock Text="{Binding RoomName}" />
  4. </DataTemplate>
  5. <DataTemplate DataType="model:RoomService">
  6. <TextBlock Text="{Binding ServiceName}" />
  7. </DataTemplate>
  8. <DataTemplate DataType="model:RoomCommunication">
  9. <TextBlock Text="{Binding CommSpyCounter}" />
  10. </DataTemplate>
  11. </UserControl.Resources>

做了如上绑定.则无需修改后台数据绑定.当数据发生变更时依然在前台UI会根据DataContent数据绑定服务实体对象[FirstEntity/SecondEntity/ThreeEntity]数据类型时则会使用定义DataTemplate模板中绑定相同数据类型的模板执行.这种方式很方便解决与某个数据类型进行直接关联而非统一的DataContent.另外一个问题数据发生改变动态更新使用对应DataTemplate.

数据模板是很好的方式来规范应用程序中数据绑定的格式。有了它们,可能会发现自己重新思考如何着手重用样式和格式,可能使用更多的内容较少的直接控制和应用的样式.

转载于:https://blog.51cto.com/chenkai/763591

Silverlight 5 Beta新特性[5]隐式模板支持相关推荐

  1. Silverlight 5 Beta新特性博文索引

    在MIX11大会上相对Windows phone 7 令人瞩目期待本年一次重大更新Mango所带来的新特性以及Kinect for Windows SDK在现场大放异彩的Action演示.Silver ...

  2. 【转】Silverlight 3 Beta 新特性解析(7)- Child Window和Shader Effect篇

    前提条件: 阅读本文之前请确认你已经安装了如下软件 Visual Studio 2008 (Express) SP1 Silverlight 3 Tools For Visual Studio Mic ...

  3. Silverlight 5 Beta新特性[4]文本缩进控制

    持续带来Silverlight 5 Beta新特性的更新.在Silverlight 5 Beta版本对文本的处理能力做了真正的改进.其中从官方Silverlight 5 Beta Futurez中提到 ...

  4. Silverlight 5 Beta 新特性预览

    MIX11大会昨天刚刚结束.第二天核心Session包含三个部分:Windows phone 7/Silverlight 5 Beta/Kinect for Windows SDK.在整个全程直播中. ...

  5. Silverlight 5 beta新特性探索系列:9.视频快进快退和TextSearch对象对文字项查询

    本节讲诉两个新特性:一.在Silverlight 5中可以控制MediaElement对象播放的视频进行快进快退控制.二.在Silverlight 5中的文字项进行搜索查询. 一.对于MediaEle ...

  6. Silverlight 5 Beta新特性[3]多窗口支持

    前面两篇分别介绍Silverlight 5 Beta中XAML数据绑定支持的断点调试和鼠标的多重点击实现. 本篇将解析Silverlight 5 Beta版本中对OOB模式下多窗口的支持. 谈到Sil ...

  7. Silverlight 5 beta新特性探索系列:3.Silverlight5中的文字增进控制【附带实例源码】...

    在Silverlight 5中新增了CharacterSpacing属性对文字间距进行控制,增加了RichTextBoxOverflow控件以灵活的对大量文字进行合理的排版显示. 一.Characte ...

  8. .NET 6新特性试用 | 隐式using指令

    前言 在使用<最小Web API>时,我们发现,相比以前的代码,大量的using指令消失了: using指令的主要作用是允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间. ...

  9. chrome 63 android分类,Chrome 63 Beta新特性介绍

    原标题:Chrome 63 Beta新特性介绍 除非另外注明,否则,下面介绍的更改均适用于最新 Chrome Beta 渠道版(Android.Chrome 操作系统.Linux.Mac 和 Wind ...

最新文章

  1. 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]
  2. Java 取整数的个、十、百位
  3. 实景三维系列4 | 为什么需要单体化
  4. Python:Python学习总结
  5. MySQL之架构与历史(二)
  6. Flex4_HttpService组件
  7. poj 3278 catch that cow BFS(基础水)
  8. Bootstrap鼠标悬停下拉导航总结
  9. 【优化预测】基于matlab差分优化灰狼算法优化支持向量机SVM预测【含Matlab源码 1576期】.zip
  10. PCI Express (PCIe) 介绍
  11. ViewPage实现一屏多页面显示(进阶版)
  12. 11.1-4日,RTE2022 第八届实时互联网大会邀您“聚享万象”,线上报名开启
  13. 直流电机参数术语中英文对照及解释
  14. Line APP端协议登录、群发、拉群功能
  15. 脚手架的这个好搭档 今天要重点来介绍下!
  16. UOS Deepin 安装 flatpak
  17. HTML5+js 实现生成二维码,扫描解析二维码
  18. 常用css整理2 转自csdn
  19. “5G 太耗电,关掉它!”
  20. 共轭梯度法(Conjugate Gradients)(3)

热门文章

  1. 多个canvas画布合并_canvas的基础入门
  2. PHP使用指南,PHP使用指南-cookies部分
  3. Linux qt程序打包依赖库,Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)...
  4. java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片
  5. python 保存图片代码_最简单的selenium+Python自动右键保存图片
  6. vue概述、vue文件特点、vue核心思想、双向数据流、单文件、启动一个vue项目、声明式渲染
  7. 读书,上学,上名校!!!!!
  8. 数据分析体系构建那点事!
  9. 中国国民休闲状况调查(2020)
  10. ip地址配置 mongodb_MongoDB安全配置详解