Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
BindableObject
Ekstensi menyediakan serangkaian metode ekstensi yang mendukung konfigurasi Binding
pada BindableObject
.
Ekstensi menawarkan metode berikut:
Mengikat
Metode ini Bind
menawarkan sejumlah kelebihan beban yang memberikan kenyamanan yang berbeda di sekitar pengaturan Binding
. Untuk informasi lebih lanjut tentang kemungkinan Binding
data dalam aplikasi .NET MAUI, lihat dokumentasi Microsoft.
Contoh
Ada sejumlah kelebihan beban untuk metode ini Bind
.
Pengikatan satu arah
Pengikatan satu arah dari properti model tampilan (RegistrationViewModel
) yang Label
dipanggil RegistrationCode
ke Text
properti dapat dibuat sebagai berikut:
new Entry()
.Bind(Label.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode)
Pengikatan dua arah
Pengikatan dua arah dari properti model tampilan (RegistrationViewModel
) yang Entry
dipanggil RegistrationCode
ke Text
properti dapat dibuat sebagai berikut:
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
setter: static (RegistrationViewModel vm, string code) => vm.RegistrationCode = code)
Pengikatan Kompleks (Berlapis)
Saat mengikat properti di dalam properti (juga dikenal sebagai "Pengikatan Berlapis"), handlers
parameter diperlukan. Parameter handler
memerlukan referensi ke setiap Properti dalam rantai pengikatan yang kompleks.
Bersama dengan contoh di bawah ini, Anda dapat menemukan contoh tambahan pengikatan kompleks dalam Pengujian Unit untuk CommunityToolkit.Maui.Markup
.
Contoh Pengikatan Kompleks (Berlapis)
Dengan menggunakan kelas di bawah iniViewModel
, kita dapat membuat pengikatan dua arah berlapis secara langsung menggunakan handlers
ViewModel.NestedObject.Text
parameter :
new Entry().Bind(
Entry.TextProperty,
getter: static (ViewModel vm) => vm.NestedObject.Text,
handlers:
[
(vm => vm, nameof(ViewModel.NestedObject)),
(vm => vm.NestedObject, nameof(ViewModel.NestedObject.Text)),
],
setter: static (ViewModel vm, string text) => vm.NestedObject.Text = text);
class ViewModel
{
public NestedObject NestedObject { get; set; } = new();
public required string Text { get; set; }
}
class NestedObject
{
public required string Text { get; set; }
}
Properti default
Metode Bind
ini dapat dipanggil tanpa menentukan properti untuk mengatur pengikatan, ini akan menggunakan default yang disediakan oleh pustaka dengan daftar lengkap di repositori GitHub.
Properti default yang akan diikat adalah Entry
properti teks. Jadi contoh di atas dapat ditulis sebagai:
new Entry().Bind(nameof(ViewModel.RegistrationCode))
Peringatan
Pendekatan ini akan mengakibatkan beberapa tingkat Pantulan digunakan dan tidak akan berkinerja serta pendekatan properti Eksplisit.
Peringatan
Pengikatan seperti ini yang menggunakan string
untuk path:
parameter tidak aman-pangkas
Konversi nilai
Metode ini Bind
memungkinkan pengembang untuk menyediakan Converter
yang ingin mereka gunakan dalam pengikatan atau hanya menyediakan mekanisme untuk menggunakan konversi sebaris.
Converter
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
converter: new TextCaseConverter { Type = TextCaseType.Upper });
Lihat TextCaseConverter
untuk dokumentasi tentang penggunaan penuhnya.
Konversi sebaris
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
convert: (string? text) => text?.ToUpperInvariant());
Beberapa Pengikatan
Beberapa Pengikatan dapat dikumpulkan bersama-sama memanfaatkan IMultiValueConverter
.
Parameter convert
adalah Func
yang diperlukan untuk mengonversi beberapa pengikatan ke hasil yang diperlukan.
new Label()
.Bind(Label.TextProperty,
binding1: BindingBase.Create((ViewModel vm) => vm.IsBusy),
binding2: BindingBase.Create((ViewModel vm) => vm.LabelText),
convert: ((bool IsBusy, string LabelText) values) => values.IsBusy ? string.Empty : values.LabelText)
BindCommand
Metode ini BindCommand
menyediakan cara yang berguna untuk mengonfigurasi pengikatan ke default yang disediakan oleh pustaka dengan daftar lengkap di repositori GitHub.
Perintah default untuk mengikat adalah Button
Command
properti . Jadi contoh berikut menyiapkan pengikatan ke properti tersebut.
new Button().BindCommand(static (ViewModel vm) => vm.SubmitCommand);
Hal di atas juga dapat ditulis sebagai:
Catatan
Jika perintah default tidak menghasilkan pengikatan ke perintah yang Anda inginkan, Maka Anda dapat menggunakan metode .Bind
new Button()
.Bind(Entry.CommandProperty,
getter: static (RegistrationViewModel vm) => vm.SubmitCommand,
mode: BindingMode.OneTime);
Pengikatan Gerakan
Pengikatan gerakan memungkinkan kami membuat ClickGestureRecognizer
, , SwipeGestureRecognizer
TapGestureRecognizer
, melampirkannya ke elemen apa pun yang mengimplementasikan IGestureRecognizer
dan mengikatnya ke ICommand
di ViewModel kami.
BindClickGesture
Contoh berikut menunjukkan cara membuat ClickGestureRecognizer
yang memerlukan 2
klik untuk mengaktifkan, melampirkannya ke Label
dan mengikatnya ke properti yang ICommand
disebut ClickCommand di ViewModel kami:
new Label()
.BindClickGesture(
static (ViewModel vm) => vm.ClickCommand,
commandBindingMode: BindingMode.OneTime,
numberOfClicksRequired: 2));
BindSwipeGesture
Contoh berikut menunjukkan cara membuat SwipeGestureRecognizer
yang memerlukan SwipeDirection.Up
SwipeDirection
dan jarak 200 titik minumum untuknya Threshold
, lalu melampirkannya ke Label
dan mengikatnya ke properti yang ICommand
disebut SwipeCommand di ViewModel kami:
new Label()
.BindSwipeGesture(
static (ViewModel vm) => vm.SwipeCommand,
commandBindingMode: BindingMode.OneTime,
direction: SwipeDirection.Up,
threshold: 200);
BindTapGesture
Contoh berikut menunjukkan cara membuat ClickGestureRecognizer
yang mengharuskan 2
ketukan untuk mengaktifkan, melampirkannya ke Label
dan mengikatnya ke properti yang ICommand
disebut TapCommand di ViewModel kami:
new Label()
.BindTapGesture(
static (ViewModel vm) => vm.TapCommand,
commandBindingMode: BindingMode.OneTime,
numberOfTapsRequired: 2));
AppThemeBinding
Metode ini AppThemeBinding
memungkinkan nilai terang dan gelap ditetapkan ke BindableProperty
sehingga ketika aplikasi AppTheme
dimodifikasi, nilai yang sesuai akan digunakan untuk tema tersebut.
Contoh berikut akan menetapkan warna hitam ke Text
properti Label
kontrol jika aplikasi berjalan dalam tema terang dan putih dalam tema gelap.
new Label().AppThemeBinding(Label.TextColorProperty, Colors.Black, Colors.White);
Catatan
Ada metode yang lebih spesifik saat berhadapan dengan Color
properti. AppThemeColorBinding
akan melakukan perilaku yang mendasar yang sama seperti AppThemeBinding
tetapi memerlukan sekumpulan Color
parameter.
Untuk informasi selengkapnya, lihat dokumentasi Tema .
Contoh
Anda dapat menemukan contoh metode ekstensi ini yang beraksi di seluruh Aplikasi Sampel Toolkit Komunitas .NET MAUI.
API
Anda dapat menemukan kode sumber untuk BindableObject
metode ekstensi di repositori GitHub .NET MAUI Community Toolkit.
.NET MAUI Community Toolkit