DataTemplateSelector
可以幫助我們實(shí)現(xiàn)動(dòng)態(tài)選擇數(shù)據(jù)綁定的模版运嗜,如通過ListView+DataTemplateSelector實(shí)現(xiàn)微信朋友圈或聊天列表效果抢呆。
Github已有聊天效果圖
喜歡閱讀代碼請直接移步:https://github.com/nishanil/Xamarin.Forms-Samples/tree/master/DataTemplateSelector
本文通過一個(gè)簡單的Demo練習(xí)DataTemplateSelector的使用。
首先在新建的空項(xiàng)目中添加三個(gè)Model類:
其中BaseModel
作基類哺壶,表示數(shù)據(jù)源類型,TitleModel
和DescribeModel
分別是BaseModel的子類表示數(shù)據(jù)源的不同情況。作為練習(xí)BaseModel中僅定義了一個(gè)String類型屬性Title徙瓶,TitleModel只是單純的繼承BaseModel,DescribeModel繼承BaseModel的同時(shí)增加了一個(gè)String類型屬性Describe嫉称。
接下來開始為本文的主角編碼侦镇,聲明一個(gè)MyDataTemplateSelector
繼承DataTemplateSelector
。
其中TitleTemplate和DescribeTemplate是我們根據(jù)情況定義的兩個(gè)數(shù)據(jù)模版织阅,TitleTemplate對應(yīng)TitleModel壳繁,DescribeTemplate對應(yīng)DescribeModel。
OnSelectTemplate
方法是我們必須重寫的一個(gè)方法,在OnSelectTemplate方法中判斷item的類型或某個(gè)屬性值返回對應(yīng)的DataTemplate闹炉。
接下來主要介紹DataTemplateSelector在Xaml中的使用蒿赢。
首先在Resources中定義我們需要的兩個(gè)DataTemplate。
為了方便用TextCell代替自定義Cell渣触,兩個(gè)DataTemplate 的Key值方便使用區(qū)分分別定義為TitleTemplate和DescribeTemplate羡棵,可以定義你自己的任意值。
定義了需要的DataTemplate后再定義我們的MyDataTemplateSelector昵观。并將提前定義好的DataTemplate通過StaticResource
賦值給MyDataTemplateSelector的TitleTemplate和DescribeTemplate屬性晾腔。
Demo中所有內(nèi)容都定義在了ContentPage.Resources內(nèi),完整定義代碼啊犬。
定義ListView時(shí)再將我們定義好的MyDataTemplateSelector對象賦值給ListView的ItemTemplate
屬性
模擬數(shù)據(jù)源并綁定到ListView:
Demo效果圖: