Xamarin.Forms DataTemplateSelector Oluşturma
DataTemplateSelector, veriye bağlı bir özelliğin değerine göre çalışma zamanında DataTemplate seçmek için kullanılabilir. Bu, belirli nesnelerin görünümünü özelleştirmek için aynı nesne türüne birden çok DataTemplat'ın uygulanmasını sağlar. Bu makalede DataTemplateSelector oluşturma ve kullanma işlemleri gösterilmektedir.
Veri şablonu seçicisi, içindeki her nesnenin görünümünün belirli DataTemplate
bir ListView
döndüren veri şablonu seçicisi tarafından çalışma zamanında seçilebildiği bir nesne ListView
koleksiyonuna bağlama gibi senaryoları etkinleştirir.
DataTemplateSelector Oluşturma
Veri şablonu seçicisi, öğesinden DataTemplateSelector
devralan bir sınıf oluşturularak uygulanır. Ardından OnSelectTemplate
yöntemi, aşağıdaki kod örneğinde gösterildiği gibi belirli DataTemplate
bir değerini döndürmek için geçersiz kılınabilir:
public class PersonDataTemplateSelector : DataTemplateSelector
{
public DataTemplate ValidTemplate { get; set; }
public DataTemplate InvalidTemplate { get; set; }
protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
{
return ((Person)item).DateOfBirth.Year >= 1980 ? ValidTemplate : InvalidTemplate;
}
}
yöntemi, OnSelectTemplate
özelliğin değerine DateOfBirth
göre uygun şablonu döndürür. Döndürülecek şablon, özelliğinin ValidTemplate
veya özelliğinin InvalidTemplate
değeridir ve bunu kullanırken PersonDataTemplateSelector
ayarlanır.
Daha sonra veri şablonu seçici sınıfının bir örneği gibi ListView.ItemTemplate
denetim özelliklerine Xamarin.Forms atanabilir. Geçerli özelliklerin listesi için bkz . DataTemplate Oluşturma.
Sınırlamalar
DataTemplateSelector
örnekleri aşağıdaki sınırlamalara sahiptir:
- Alt
DataTemplateSelector
sınıf, birden çok kez sorgulanırsa aynı veriler için her zaman aynı şablonu döndürmelidir. - Alt
DataTemplateSelector
sınıf başka birDataTemplateSelector
alt sınıf döndürmemelidir. - Alt
DataTemplateSelector
sınıf, her çağrıda yeni birDataTemplate
örneği döndürmemelidir. Bunun yerine, aynı örnek döndürülmelidir. Bunun yapılmaması bir bellek sızıntısı oluşturur ve sanallaştırmayı devre dışı bırakır. - Android'de, başına
ListView
en fazla 20 farklı veri şablonu olamaz.
XAML'de DataTemplateSelector Kullanma
XAML'de örneği, PersonDataTemplateSelector
aşağıdaki kod örneğinde gösterildiği gibi kaynak olarak bildirilerek oluşturulabilir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Selector;assembly=Selector" x:Class="Selector.HomePage">
<ContentPage.Resources>
<ResourceDictionary>
<DataTemplate x:Key="validPersonTemplate">
<ViewCell>
...
</ViewCell>
</DataTemplate>
<DataTemplate x:Key="invalidPersonTemplate">
<ViewCell>
...
</ViewCell>
</DataTemplate>
<local:PersonDataTemplateSelector x:Key="personDataTemplateSelector"
ValidTemplate="{StaticResource validPersonTemplate}"
InvalidTemplate="{StaticResource invalidPersonTemplate}" />
</ResourceDictionary>
</ContentPage.Resources>
...
</ContentPage>
Bu sayfa düzeyi ResourceDictionary
iki DataTemplate
örneği ve bir PersonDataTemplateSelector
örneği tanımlar. Örnek, PersonDataTemplateSelector
işaretleme uzantısını ValidTemplate
kullanarak ve InvalidTemplate
özelliklerini uygun DataTemplate
örneklere StaticResource
ayarlar. Kaynaklar sayfanın ResourceDictionary
içinde tanımlanmış olsa da, denetim düzeyinde veya uygulama düzeyinde de tanımlanabilir.
Örnek PersonDataTemplateSelector
, aşağıdaki kod örneğinde gösterildiği gibi özelliğine ListView.ItemTemplate
atanarak tüketilir:
<ListView x:Name="listView" ItemTemplate="{StaticResource personDataTemplateSelector}" />
Çalışma zamanında, ListView
çağrısı veri nesnesini parametre olarak item
geçirirken, temel koleksiyondaki öğelerin her biri için yöntemini çağırırPersonDataTemplateSelector.OnSelectTemplate
. DataTemplate
Yöntemi tarafından döndürülen daha sonra bu nesneye uygulanır.
Aşağıdaki ekran görüntüleri, temel alınan koleksiyondaki ListView
her nesneye uygulamasının PersonDataTemplateSelector
sonucunu gösterir:
1980'den büyük veya 1980'e eşit bir DateOfBirth
özellik değerine sahip olan tüm Person
nesneler yeşil renkte görüntülenir ve kalan nesneler kırmızı olarak görüntülenir.
C'de DataTemplateSelector Kullanma#
C# dilinde örneği PersonDataTemplateSelector
oluşturulabilir ve aşağıdaki kod örneğinde gösterildiği gibi özelliğine atanabilir ListView.ItemTemplate
:
public class HomePageCS : ContentPage
{
DataTemplate validTemplate;
DataTemplate invalidTemplate;
public HomePageCS ()
{
...
SetupDataTemplates ();
var listView = new ListView {
ItemsSource = people,
ItemTemplate = new PersonDataTemplateSelector {
ValidTemplate = validTemplate,
InvalidTemplate = invalidTemplate }
};
Content = new StackLayout {
Margin = new Thickness (20),
Children = {
...
listView
}
};
}
...
}
ÖrnekPersonDataTemplateSelector
, ve InvalidTemplate
özelliklerini yöntemi tarafından oluşturulan uygun DataTemplate
örneklere SetupDataTemplates
ayarlarValidTemplate
. Çalışma zamanında, ListView
çağrısı veri nesnesini parametre olarak item
geçirirken, temel koleksiyondaki öğelerin her biri için yöntemini çağırırPersonDataTemplateSelector.OnSelectTemplate
. DataTemplate
Yöntemi tarafından döndürülen daha sonra bu nesneye uygulanır.
Özet
Bu makalede, oluşturma DataTemplateSelector
ve kullanma işlemi gösterilmiştir. , DataTemplateSelector
veriye bağlı bir özelliğin değerine göre çalışma zamanında seçmek DataTemplate
için kullanılabilir. Bu, belirli nesnelerin görünümünü özelleştirmek için aynı nesne türüne birden çok DataTemplate
örneğin uygulanmasını sağlar.