Bagikan melalui


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 PersonNameobjek 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:

ListView tanpa Templat Data

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:

ListView dengan Templat Data

Penimpaan Person.ToString dapat mengembalikan string berformat yang terdiri dari Nameproperti , 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.