Silverlight 5 Beta新特性[5]隐式模板支持
2011-04-25 16:41
417 查看
继续更新Silverlight 5 Beta新特性.在Silverlight 5 BEta更新出来新特性中有一些是WPF已经存在的影子.类似前面提到的多窗体[Multiple Window Support].其实很多熟悉WPF同学应该能看到隐式模板[Implicit DataTemplates]也是借鉴WPF而来.Silverlight 4中DataTemplate在非UI项实现数据绑定模板可以多处重用.大大增加数据显示多样性提高重用的效率.当然在Silverlight 5 Beta增加了Implicit DataTemplate隐式模板.提供一些新的功能:
类似我们现在定义一项需求:星级酒店推出系统中包含多个服务:RoomService[客房服务]/Communication[外接服务]当我们把服务绑定UI上供给用户选择时通常采用DataTemplate方式进行绑定呈现.这时一种简单通用的方式.定义服务的实体类:
模拟提供数据源:
定义需要数据绑定ViewModel:
在UI呈现中做数据绑定:
这种方式很简单直接把需要所有服务主题提供了给了用户.:
但是系统需求发生变化后 我们需要在酒店服务系统需要提供订飞机票服务时.你会发现这种方式呈现使我们的DataBinding的数据源发生变化.在代码改动代价上前段UI和后台数据绑定都需要修改.这让人情何以堪.而今天提到Silverlight 5 Beta中隐式模板则彻底解决这个问题.
当我们在同一个数据加入N数据服务实体对象[存在FirstEntity/SecendEntity/ThreeEntit…N个] 因此我们需要要更加智能化.在数据源发生变动后.前段绑定数据UI能够根据数据源来进行自动识别绑定.而这就是Implicit Template隐式模板所做的工作.定义Template:
做了如上绑定.则无需修改后台数据绑定.当数据发生变更时依然在前台UI会根据DataContent数据绑定服务实体对象[FirstEntity/SecondEntity/ThreeEntity]数据类型时则会使用定义DataTemplate模板中绑定相同数据类型的模板执行.这种方式很方便解决与某个数据类型进行直接关联而非统一的DataContent.另外一个问题数据发生改变动态更新使用对应DataTemplate.
数据模板是很好的方式来规范应用程序中数据绑定的格式。有了它们,可能会发现自己重新思考如何着手重用样式和格式,可能使用更多的内容较少的直接控制和应用的样式.
Silverlight 5 Implicit DataTemplate: [1]ContentPresenter的DataTemplates可以选择基于某个数据类型进行相关联绑定 [2]隐式定义DataTemplates [3]当数据源DataContent发生变化时.动态更新的ContentPresenter DataTemplate [4]在适当范围启用的DataTemplates |
public class Room { public string RoomId { get; set; } public string RoomName { get; set; } public string RoomType { get; set; } } public class RoomService :Room { public string ServiceId { get; set; } public string ServiceName { get; set; } public double ServicePrice { get; set; } public DateTime ServiceDate { get; set; } } public class RoomCommunication : Room { public string CommClientID { get; set; } public int CommSpyCounter { get; set; } }
模拟提供数据源:
public class VipRoom_Service { public static IList<Room> GetRoomServiceDataRecord() { List<Room> getDataRoomService = new List<Room>(); getDataRoomService.Add( new Room { RoomName="StandBy_Phone_Convert"}); getDataRoomService.Add( new RoomService() { RoomName = "DUIUser_DataType_Room"}); getDataRoomService.Add( new RoomService() { RoomName = "VIPService_DataType_Room"}); getDataRoomService.Add( new RoomCommunication() { RoomName = "Communication_Client_Room" }); return getDataRoomService; } }
定义需要数据绑定ViewModel:
public class RoomService_ViewModel :INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public ObservableCollection<Room> serviceList=new ObservableCollection<Room>(); public ObservableCollection<Room> ServiceList { get {return this.serviceList; } set {this.serviceList = value; } } public void SpiltHandleBaseDataList() { if (this.serviceList != null) { var getresult = VipRoom_Service.GetRoomServiceDataRecord(); if (getresult.Count > 0) { foreach (Room getService in getresult) serviceList.Add(getService); } } } }
在UI呈现中做数据绑定:
<Grid x:Name="LayoutRoot" Background="White" Margin="30" > <TextBlock Text="This Common DataBind About Itemlist!" FontSize="14"></TextBlock> <ListBox HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding ServiceList}" ScrollViewer.VerticalScrollBarVisibility="Visible" Margin="167,47,172,112" Width="401" Height="181"></ListBox> </Grid>
这种方式很简单直接把需要所有服务主题提供了给了用户.:
但是系统需求发生变化后 我们需要在酒店服务系统需要提供订飞机票服务时.你会发现这种方式呈现使我们的DataBinding的数据源发生变化.在代码改动代价上前段UI和后台数据绑定都需要修改.这让人情何以堪.而今天提到Silverlight 5 Beta中隐式模板则彻底解决这个问题.
当我们在同一个数据加入N数据服务实体对象[存在FirstEntity/SecendEntity/ThreeEntit…N个] 因此我们需要要更加智能化.在数据源发生变动后.前段绑定数据UI能够根据数据源来进行自动识别绑定.而这就是Implicit Template隐式模板所做的工作.定义Template:
<UserControl.Resources> <DataTemplate DataType="model:Room"> <TextBlock Text="{Binding RoomName}" /> </DataTemplate> <DataTemplate DataType="model:RoomService"> <TextBlock Text="{Binding ServiceName}" /> </DataTemplate> <DataTemplate DataType="model:RoomCommunication"> <TextBlock Text="{Binding CommSpyCounter}" /> </DataTemplate> </UserControl.Resources>
做了如上绑定.则无需修改后台数据绑定.当数据发生变更时依然在前台UI会根据DataContent数据绑定服务实体对象[FirstEntity/SecondEntity/ThreeEntity]数据类型时则会使用定义DataTemplate模板中绑定相同数据类型的模板执行.这种方式很方便解决与某个数据类型进行直接关联而非统一的DataContent.另外一个问题数据发生改变动态更新使用对应DataTemplate.
数据模板是很好的方式来规范应用程序中数据绑定的格式。有了它们,可能会发现自己重新思考如何着手重用样式和格式,可能使用更多的内容较少的直接控制和应用的样式.
相关文章推荐
- Silverlight 5 Beta新特性[5]隐式模板支持
- Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
- 稳扎稳打Silverlight(64) - 5.0绑定之 Style 中的 Setter 支持绑定, 绑定父级链上的元素, 隐式指定数据模板, UI 上数据更新的触发方式
- Silverlight 5 Beta新特性[3]多窗口支持
- Silverlight 5 beta新特性探索系列:6.Silverlight 5新增低延迟声音效果类SoundEffect.支持wav音乐格式【附带源码实例】
- Silverlight 5 Beta新特性[3]多窗口支持
- Silverlight 5 beta新特性系列:6.Silverlight 5新增低延迟声音效果类SoundEffect.支持wav音乐格式
- ASP.NET 4 Beta 2新特性之丰富的工程模板支持
- Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
- Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持
- Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持
- Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
- Silverlight 5 RC新特性探索系列:15.Silverlight 5 RC 对OpenType字体属性的支持
- Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持
- Silverlight 5 RC新特性探索系列:15.Silverlight 5 RC 对OpenType字体属性的支持
- 用ArcGIS Silverlight模板新建的项目不支持中文字符
- 转载:Silverlight 4 Beta新特性
- XAML语言的调试方法。Silverlight 5 beta新特性探索系列:2.在XAML代码中设置断点和
- Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持
- Silverlight 5 beta新特性探索系列:8.Silverlight 5中自定义扩展标记