生活随笔
收集整理的這篇文章主要介紹了
Silverlight 5 Beta新特性[5]隐式模板支持
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
繼續更新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方式進行綁定呈現.這時一種簡單通用的方式.定義服務的實體類:
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.
數據模板是很好的方式來規范應用程序中數據綁定的格式。有了它們,可能會發現自己重新思考如何著手重用樣式和格式,可能使用更多的內容較少的直接控制和應用的樣式.
轉載于:https://blog.51cto.com/chenkai/763591
總結
以上是生活随笔為你收集整理的Silverlight 5 Beta新特性[5]隐式模板支持的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。