GridView, ListView ya da FlipView kontrollerini kullanırken, farklı template arasında geçiş yapmak ya da bir kontrolün içinde birden fazla template göstermek istendiğinde DataTemplateSelector kullanılabilir.
DataTemplateSelector’ü kullanmak için, bu sınıfı inherit eden yeni bir sınıf oluşturuyoruz ve bu sınıfın içinde arasında geçiş yapmak istediğimiz DataTemplate’leri tanımlıyoruz:
.png?sfvrsn=2)
Sonrasında yapmamız gereken, SelectTemplateCore isimli metodu override etmek. Bu metod, kod mantığımıza göre DataTemplate’i seçip, bize döndürecek:
.png?sfvrsn=2)
Bu DataTemplate’lerin StandardStyles.xaml ya da kullanacağımız sınıf içerisinde tanımlı olması gerekiyor. İlk olarak template’i kullanacağımız sınıfın xaml koduna, ItemTemplateSelector sınfımızı referans olarak eklemeliyiz ki, bunu bir kontrol olarak kullanabilelim:
xmlns:data=”using:Sample.Classes”
Burada Sample isimli projemde Classes klasörü içinde bulunan ItemTemplateSelector sınıfını kullanabilmek için, bu sınıfın referansını xml namespace olarak belirtmiş olduk. Bu noktadan sonra data: yazarak bu klasör içerisindeki bütün sınıflara erişmemiz mümkün.
Sonrasında yapmamız gereken, bu kontrolü sayfaya ilgili template’leri tanımlayarak eklemek:
.png?sfvrsn=2)
Artık FlipView, GridView, ListView kontrollerinin ItemTemplateSelector’ü olarak kendi selector’ümüzü kullanabiliriz:
.png?sfvrsn=2)
Eğer FlipView içerisinde birden fazla çeşit template gösterilmek isteniyorsa, ItemsSource olarak bind edilen listenin de buna uygun hazırlanması gerekir. Hiyerarşik bir şekilde hazırlanacak sınıf yapısıyla bu problem kolayca çözülebilir.