Xamarin.Forms TableView
TableView
adalah tampilan untuk menampilkan daftar data atau pilihan yang dapat digulir di mana ada baris yang tidak berbagi templat yang sama. Tidak seperti ListView, TableView
tidak memiliki konsep , sehingga item harus ditambahkan secara manual sebagai turunan ItemsSource
.
Kasus penggunaan
TableView
berguna ketika:
- menyajikan daftar pengaturan,
- mengumpulkan data dalam formulir, atau
- memperlihatkan data yang disajikan secara berbeda dari baris ke baris (misalnya angka, persentase, dan gambar).
TableView
menangani pengguliran dan peletakan baris di bagian yang menarik, kebutuhan umum untuk skenario di atas. Kontrol ini TableView
menggunakan tampilan setara yang mendasar setiap platform saat tersedia, menciptakan tampilan asli untuk setiap platform.
Struktur
Elemen dalam diatur TableView
ke dalam bagian. Di akar TableView
adalah TableRoot
, yang merupakan induk dari satu atau beberapa TableSection
instans. Masing-masing TableSection
terdiri dari judul dan satu atau beberapa ViewCell
instans:
<TableView Intent="Settings">
<TableRoot>
<TableSection Title="Ring">
<SwitchCell Text="New Voice Mail" />
<SwitchCell Text="New Mail" On="true" />
</TableSection>
</TableRoot>
</TableView>
Kode C# yang setara adalah:
Content = new TableView
{
Root = new TableRoot
{
new TableSection("Ring")
{
// TableSection constructor takes title as an optional parameter
new SwitchCell { Text = "New Voice Mail" },
new SwitchCell { Text = "New Mail", On = true }
}
},
Intent = TableIntent.Settings
};
Tampilan
TableView
Intent
mengekspos properti, yang dapat diatur ke salah TableIntent
satu anggota enumerasi:
Data
– untuk digunakan saat menampilkan entri data. Perhatikan bahwa ListView mungkin merupakan opsi yang lebih baik untuk menggulir daftar data.Form
– untuk digunakan saat TableView bertindak sebagai Formulir.Menu
– untuk digunakan saat menyajikan menu pilihan.Settings
– untuk digunakan saat menampilkan daftar pengaturan konfigurasi.
Nilai TableIntent
yang Anda pilih dapat memengaruhi bagaimana munculnya TableView
di setiap platform. Bahkan jika tidak ada perbedaan yang jelas, ini adalah praktik terbaik untuk memilih TableIntent
yang paling cocok dengan cara Anda ingin menggunakan tabel.
Selain itu, warna teks yang ditampilkan untuk masing-masing TableSection
dapat diubah dengan mengatur TextColor
properti ke Color
.
Sel bawaan
Xamarin.Forms dilengkapi dengan sel bawaan untuk mengumpulkan dan menampilkan informasi. Meskipun ListView
dan TableView
dapat menggunakan semua sel yang sama, SwitchCell
dan EntryCell
paling relevan untuk TableView
skenario.
Lihat Tampilan Sel ListView untuk deskripsi terperinci tentang TextCell dan ImageCell.
SwitchCell
SwitchCell
adalah kontrol yang digunakan untuk menyajikan dan menangkap on/off atau true
/false
status. Ini mendefinisikan properti berikut:
Text
– teks untuk ditampilkan di samping sakelar.On
– apakah sakelar ditampilkan sebagai aktif atau nonaktif.OnColor
– sakelarColor
saat berada di posisi aktif.
Semua properti ini dapat diikat.
SwitchCell
juga mengekspos OnChanged
peristiwa, memungkinkan Anda merespons perubahan dalam status sel.
EntryCell
EntryCell
berguna ketika Anda perlu menampilkan data teks yang dapat diedit pengguna. Ini mendefinisikan properti berikut:
Keyboard
– Keyboard untuk ditampilkan saat mengedit. Ada opsi untuk hal-hal seperti nilai numerik, email, nomor telepon, dll. Lihat dokumen API.Label
– Teks label untuk ditampilkan di sebelah kiri bidang entri teks.LabelColor
– Warna teks label.Placeholder
– Teks untuk ditampilkan di bidang entri saat null atau kosong. Teks ini menghilang ketika entri teks dimulai.Text
– Teks di bidang entri.HorizontalTextAlignment
– Perataan horizontal teks. Nilai diratakan tengah, kiri, atau kanan. Lihat dokumen API.VerticalTextAlignment
– Perataan vertikal teks. Nilainya adalahStart
,Center
, atauEnd
.
EntryCell
juga mengekspos Completed
peristiwa, yang diaktifkan ketika pengguna menekan tombol 'selesai' pada keyboard saat mengedit teks.
Sel kustom
Saat sel bawaan tidak cukup, sel kustom dapat digunakan untuk menyajikan dan mengambil data dengan cara yang masuk akal untuk aplikasi Anda. Misalnya, Anda mungkin ingin menyajikan slider untuk memungkinkan pengguna memilih keburaman gambar.
Semua sel kustom harus berasal dari ViewCell
, kelas dasar yang sama dengan yang digunakan semua jenis sel bawaan.
Ini adalah contoh sel kustom:
Contoh berikut menunjukkan XAML yang digunakan untuk membuat TableView
pada cuplikan layar di atas:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DemoTableView.TablePage"
Title="TableView">
<TableView Intent="Settings">
<TableRoot>
<TableSection Title="Getting Started">
<ViewCell>
<StackLayout Orientation="Horizontal">
<Image Source="bulb.png" />
<Label Text="left"
TextColor="#f35e20" />
<Label Text="right"
HorizontalOptions="EndAndExpand"
TextColor="#503026" />
</StackLayout>
</ViewCell>
</TableSection>
</TableRoot>
</TableView>
</ContentPage>
Kode C# yang setara adalah:
var table = new TableView();
table.Intent = TableIntent.Settings;
var layout = new StackLayout() { Orientation = StackOrientation.Horizontal };
layout.Children.Add (new Image() { Source = "bulb.png"});
layout.Children.Add (new Label()
{
Text = "left",
TextColor = Color.FromHex("#f35e20"),
VerticalOptions = LayoutOptions.Center
});
layout.Children.Add (new Label ()
{
Text = "right",
TextColor = Color.FromHex ("#503026"),
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.EndAndExpand
});
table.Root = new TableRoot ()
{
new TableSection("Getting Started")
{
new ViewCell() {View = layout}
}
};
Content = table;
Elemen akar di bawah TableView
adalah TableRoot
, dan ada TableSection
segera di bawah TableRoot
. ViewCell
ditentukan langsung di bawah TableSection
, dan StackLayout
digunakan untuk mengelola tata letak sel kustom, meskipun tata letak apa pun dapat digunakan di sini.
Catatan
Tidak seperti ListView
, TableView
tidak mengharuskan sel kustom (atau apa pun) didefinisikan dalam ItemTemplate
.
Tinggi baris
Kelas TableView
memiliki dua properti yang dapat digunakan untuk mengubah tinggi baris sel:
RowHeight
– mengatur tinggi setiap baris keint
.HasUnevenRows
– baris memiliki tinggi yang bervariasi jika diatur ketrue
. Perhatikan bahwa saat mengatur properti ini ketrue
, tinggi baris akan secara otomatis dihitung dan diterapkan oleh Xamarin.Forms.
Saat tinggi konten dalam sel dalam diubahTableView
, tinggi baris diperbarui secara implisit di Android dan Platform Windows Universal (UWP). Namun, pada iOS harus diperbarui dengan mengatur HasUnevenRows
properti ke true
dan dengan memanggil Cell.ForceUpdateSize
metode .
Contoh XAML berikut menunjukkan TableView
yang berisi ViewCell
:
<ContentPage ...>
<TableView ...
HasUnevenRows="true">
<TableRoot>
...
<TableSection ...>
...
<ViewCell x:Name="_viewCell"
Tapped="OnViewCellTapped">
<Grid Margin="15,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Text="Tap this cell." />
<Label x:Name="_target"
Grid.Row="1"
Text="The cell has changed size."
IsVisible="false" />
</Grid>
</ViewCell>
</TableSection>
</TableRoot>
</TableView>
</ContentPage>
Saat diketuk ViewCell
, penanganan OnViewCellTapped
aktivitas dijalankan:
void OnViewCellTapped(object sender, EventArgs e)
{
_target.IsVisible = !_target.IsVisible;
_viewCell.ForceUpdateSize();
}
Penanganan OnViewCellTapped
aktivitas memperlihatkan atau menyembunyikan yang kedua Label
di ViewCell
, dan secara eksplisit memperbarui ukuran sel dengan memanggil Cell.ForceUpdateSize
metode .
Cuplikan layar berikut menunjukkan sel sebelum diketuk:
Cuplikan layar berikut menunjukkan sel setelah diketuk:
Penting
Ada kemungkinan penurunan performa yang kuat jika fitur ini terlalu banyak digunakan.