Pengantar Xamarin.Forms Templat Data
Xamarin.Forms templat data menyediakan kemampuan untuk menentukan presentasi data pada kontrol yang didukung. Artikel ini menyediakan pengantar templat data, memeriksa mengapa templat tersebut diperlukan.
ListView
Pertimbangkan yang menampilkan kumpulan Person
objek. Contoh kode berikut menunjukkan definisi Person
kelas:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Location { get; set; }
}
Kelas Person
menentukan properti , Age
, dan Location
, yang dapat diatur saat Person
Name
objek dibuat. ListView
digunakan untuk menampilkan kumpulan Person
objek, seperti yang ditunjukkan dalam contoh kode XAML berikut:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DataTemplates"
...>
<StackLayout Margin="20">
...
<ListView Margin="0,20,0,0">
<ListView.ItemsSource>
<x:Array Type="{x:Type local:Person}">
<local:Person Name="Steve" Age="21" Location="USA" />
<local:Person Name="John" Age="37" Location="USA" />
<local:Person Name="Tom" Age="42" Location="UK" />
<local:Person Name="Lucas" Age="29" Location="Germany" />
<local:Person Name="Tariq" Age="39" Location="UK" />
<local:Person Name="Jane" Age="30" Location="USA" />
</x:Array>
</ListView.ItemsSource>
</ListView>
</StackLayout>
</ContentPage>
Item ditambahkan ke ListView
dalam XAML dengan menginisialisasi ItemsSource
properti dari array Person
instans.
Catatan
Perhatikan bahwa x:Array
elemen memerlukan atribut yang Type
menunjukkan jenis item dalam array.
Halaman C# yang setara ditampilkan dalam contoh kode berikut, yang menginisialisasi ItemsSource
properti ke List
instans Person
:
public WithoutDataTemplatePageCS()
{
...
var people = new List<Person>
{
new Person { Name = "Steve", Age = 21, Location = "USA" },
new Person { Name = "John", Age = 37, Location = "USA" },
new Person { Name = "Tom", Age = 42, Location = "UK" },
new Person { Name = "Lucas", Age = 29, Location = "Germany" },
new Person { Name = "Tariq", Age = 39, Location = "UK" },
new Person { Name = "Jane", Age = 30, Location = "USA" }
};
Content = new StackLayout
{
Margin = new Thickness(20),
Children = {
...
new ListView { ItemsSource = people, Margin = new Thickness(0, 20, 0, 0) }
}
};
}
ListView
Panggilan ToString
saat menampilkan objek dalam koleksi. Karena tidak Person.ToString
ada penimpaan, ToString
mengembalikan nama jenis setiap objek, seperti yang ditunjukkan pada cuplikan layar berikut:
Objek Person
dapat mengambil alih ToString
metode untuk menampilkan data yang bermakna, seperti yang ditunjukkan dalam contoh kode berikut:
public class Person
{
...
public override string ToString ()
{
return Name;
}
}
Ini menghasilkan menampilkan Person.Name
nilai properti untuk setiap objek dalam koleksi, seperti yang ditunjukkan ListView
pada cuplikan layar berikut:
Penimpaan Person.ToString
dapat mengembalikan string berformat yang terdiri dari Name
properti , Age
, dan Location
. Namun, pendekatan ini hanya menawarkan kontrol terbatas atas tampilan setiap item data. Untuk fleksibilitas yang lebih besar, DataTemplate
dapat dibuat yang menentukan tampilan data.
Membuat DataTemplate
DataTemplate
digunakan untuk menentukan tampilan data, dan biasanya menggunakan pengikatan data untuk menampilkan data. Skenario penggunaan umumnya adalah saat menampilkan data dari kumpulan objek dalam ListView
. Misalnya, ketika ListView
terikat ke kumpulan Person
objek, ListView.ItemTemplate
properti akan diatur ke DataTemplate
yang menentukan tampilan setiap Person
objek di ListView
. DataTemplate
akan berisi elemen yang mengikat nilai properti dari setiap Person
objek. Untuk informasi selengkapnya tentang pengikatan data, lihat Dasar-Dasar Pengikatan Data.
DataTemplate
Yang ditempatkan sebagai anak langsung dari properti yang tercantum di atas dikenal sebagai templat sebaris. Atau, DataTemplate
dapat didefinisikan sebagai sumber daya tingkat kontrol, tingkat halaman, atau tingkat aplikasi. Memilih tempat untuk menentukan DataTemplate
dampak di mana dampaknya dapat digunakan:
- Yang
DataTemplate
ditentukan pada tingkat kontrol hanya dapat diterapkan ke kontrol. - Yang
DataTemplate
ditentukan di tingkat halaman dapat diterapkan ke beberapa kontrol yang valid pada halaman. - Yang
DataTemplate
ditentukan pada tingkat aplikasi dapat diterapkan ke kontrol yang valid di seluruh aplikasi.
Templat data yang lebih rendah dalam hierarki tampilan lebih diutamakan daripada yang ditentukan lebih tinggi saat berbagi x:Key
atribut. Misalnya, templat data tingkat aplikasi akan ditimpa oleh templat data tingkat halaman, dan templat data tingkat halaman akan ditimpa oleh templat data tingkat kontrol, atau templat data sebaris.