?這兩天,在做《簡(jiǎn)影uwp》的首頁(yè)推薦版塊時(shí),用到了數(shù)據(jù)模板選擇器,所以簡(jiǎn)單介紹一下。數(shù)據(jù)模板選擇器。顧名思義,就是可以選擇性的展示不同的數(shù)據(jù)模板。那么,什么時(shí)候用數(shù)據(jù)模板選擇器?怎么用呢?往下看:
應(yīng)用場(chǎng)景:
同樣是以我目前正在做的《簡(jiǎn)影uwp》為例,在做首頁(yè)推薦版塊時(shí),要展示的數(shù)據(jù)是不同的版塊的,都放在了一個(gè)集合中,這樣的話,如果直接將數(shù)據(jù)綁定到ListView或者GridView上顯示的話,是不可取的。雖然這些數(shù)據(jù)在一個(gè)集合內(nèi),但是因?yàn)榧蟽?nèi)每個(gè)種類(lèi)都不一樣,顯示的方式,展示的數(shù)據(jù)都不同,那么針對(duì)這種情況,就需要用到數(shù)據(jù)模板選擇器了。根據(jù)不同的種類(lèi),展示不同的模板。
實(shí)例演示:
第一步:要使用數(shù)據(jù)模板選擇器,首頁(yè)定義一個(gè)數(shù)據(jù)模板選擇器類(lèi)。讓這個(gè)類(lèi)繼承自:DataTemplateSelector。再定義需要展示的所以模板類(lèi)型。然后重寫(xiě)它的SelectTemplateCore方法即可。根據(jù)集合內(nèi)的類(lèi)型,返回不同的數(shù)據(jù)模板。代碼如下;
? public sealed class CustomDataTemplateSelector : DataTemplateSelector
? ? {
? ? ? ? public DataTemplate CollectionTemplate { get; set; }
? ? ? ? public DataTemplate ThreadTemplate { get; set; }
? ? ? ? public DataTemplate MuscicTemplate { get; set; }
? ? ? ? public DataTemplate VideoTemplate { get; set; }
? ? ? ? public DataTemplate TcTemplate { get; set; }
? ? ? ? protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
? ? ? ? {
? ? ? ? ? ? RecList list = item as RecList;
? ? ? ? ? ? if (list != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? switch (list.type)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? case "collection":
? ? ? ? ? ? ? ? ? ? ? ? return CollectionTemplate;
? ? ? ? ? ? ? ? ? ? case "threadmusic":
? ? ? ? ? ? ? ? ? ? ? ? return MuscicTemplate;
? ? ? ? ? ? ? ? ? ? case "threadvideo":
? ? ? ? ? ? ? ? ? ? ? ? return VideoTemplate;
? ? ? ? ? ? ? ? ? ? case "movielines":
? ? ? ? ? ? ? ? ? ? ? ? return TcTemplate;
? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? return ThreadTemplate;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return null;
? ? ? ? }
? ? }
第二步:
在前臺(tái)定義需要的數(shù)據(jù)模板,即DataTemplate.要和上面后臺(tái)定義的對(duì)應(yīng)。
部分代碼截圖如下: 即是兩個(gè)不同的數(shù)據(jù)模板。

第三步:定義Listview或者GridView,然后引用定義的數(shù)據(jù)模板即可。

這樣,就可以實(shí)現(xiàn)根據(jù)集合內(nèi)的對(duì)象不同,展示不同的數(shù)據(jù)模板了。最后,上一張,正在做的這個(gè)頁(yè)面的圖示:

這樣就可以實(shí)現(xiàn)在一個(gè)列表內(nèi)展示不同類(lèi)型的內(nèi)容了。好了,今天就記到這里。歡迎熱愛(ài)uwp開(kāi)發(fā)的同學(xué)加入uwp開(kāi)發(fā)交流群:193148992.共同學(xué)習(xí)交流。