BindableObject Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty.
public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
interface INotifyPropertyChanged
interface IDynamicResourceHandler
- Warisan
-
System.ObjectBindableObject
- Turunan
- Penerapan
-
System.ComponentModel.INotifyPropertyChanged IDynamicResourceHandler
Keterangan
Kelas ini BindableObject menyediakan mekanisme penyimpanan data yang memungkinkan pengembang aplikasi untuk menyinkronkan data antar objek sebagai respons terhadap perubahan, misalnya, antara Model Tampilan dan Tampilan dalam pola desain MVVM. Semua elemen visual di Xamarin.Forms namespace diwarisi dari BindableObject kelas, sehingga semuanya dapat digunakan untuk mengikat data di belakang elemen antarmuka pengguna mereka untuk Melihat Model yang disediakan oleh pengembang aplikasi.
Untuk mengikat data di belakang properti dalam BindableObject, biasanya tampilan, ke properti di Model Tampilan, pengembang aplikasi harus melakukan hal berikut.
Pertama, pengembang membuat sepasang properti pada tampilan, salah satunya adalah BindableProperty, dan yang lainnya adalah properti dari jenis apa pun yang diperlukan. Dalam kode di bawah ini, MockBindableObject
singkatan dari apa yang biasanya menjadi objek antarmuka pengguna dalam kode produksi. Pengembang aplikasi harus mencatat penggunaan SetValue(BindableProperty, Object) dan GetValue(BindableProperty) untuk mendapatkan dan menetapkan nilai pada properti terikat; Properti dari jenis yang diinginkan menyediakan antarmuka yang akan diterapkan oleh target properti terikat.
class MockBindableObject : BindableObject
{
// App developers should use the method below in production code for
// better performance
public static readonly BindableProperty BoundNameProperty =
BindableProperty.Create ("Foo", typeof (string),
typeof (MockBindableObject),
default(string));
// App developers should use the method below during development for
// design-time error checking as the codebase evolves.
// public static readonly BindableProperty FooProperty
// = BindableProperty.Create<MockBindableObject, string> (
// o => o.Foo, default (string)
// );
public string BoundName
{
get { return (string) GetValue (BoundNameProperty); }
set { SetValue (BoundNameProperty, value); }
}
}
Kedua, pengembang membuat implementasi untuk properti terikat di kelas yang mengimplementasikan System.ComponentModel.INotifyPropertyChanged antarmuka. Dalam pola desain MVVM, ini biasanya dilakukan oleh Model Tampilan. Pengembang aplikasi harus mengimplementasikan System.ComponentModel.INotifyPropertyChanged antarmuka pada kelas yang ingin mereka gunakan sebagai Lihat Model. Dalam contoh di bawah ini, pengembang aplikasi harus memperhatikan cara idiomatik tempat Name
properti diimplementasikan, pertama, memastikan bahwa properti benar-benar berubah dan kembali jika tidak, dan hanya kemudian menetapkan nilai dan memanggil OnPropertyChanged(String) metode . Selain itu, Name
properti dalam contoh di bawah ini hanya membungkus name
bidang . Dalam praktiknya, pengembang aplikasi dapat memilih model yang berbeda untuk menyimpan data aplikasi.
class MockViewModel : INotifyPropertyChanged
{
string name;
public string Name
{
get { return name; }
set
{
// OnPropertyChanged should not be called if the property value
// does not change.
if (name == value)
return;
name = value;
OnPropertyChanged ();
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged (string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler (this, new PropertyChangedEventArgs (propertyName));
}
}
Ketiga, dan terakhir, pengembang aplikasi mengikat instans BindableObject ke instans yang mengimplementasikan INotifyPropertyChanged. Dalam kosakata pola desain MVVM, ini adalah "mengikat instans Tampilan ke instans Model Tampilan." Setelah langkah ini selesai, perubahan dalam data disebarkan antara Tampilan dan Lihat Model dengan cara yang ditentukan oleh nilai BindingMode enumerasi, jika ada, yang diteruskan selama langkah pengikatan.
Kode di bawah ini, ketika disertakan dalam proyek yang mereferensikan kelas di atas, membuat instans dan MockBindable
MockViewModel
, melakukan beberapa intialisasi, mengatur pengikatan, lalu menunjukkan pengikatan satu arah. Kode di bawah ini berjalan tanpa melemparkan pengecualian.
public static void OneWayDemo ()
{
var view = new MockBindableObject ();
var viewModel = new MockViewModel ();
// Pre-load the ViewModel, for demonstration purposes
viewModel.Name = "Testing";
// Create a one-way (default) binding
view.SetBinding (MockBindableObject.BoundNameProperty, new Binding ("Name"));
// App developers should only set the binding context after all
// calls to SetBinding() have been made, for performance reasons.
view.BindingContext = viewModel;
// In a one way binding, the ViewModel value will be used to update
// the values in the View during initialization
if (view.BoundName != "Testing")
throw new Exception ();
view.BoundName = "gnitseT";
// in a one way binding, changes to the View will NOT update the ViewModel
if (viewModel.Name == "gnitseT")
throw new Exception ();
}
Konstruktor
BindableObject() |
Menginisialisasi instans baru dari kelas BindableObject. |
Bidang
BindingContextProperty |
Mengimplementasikan properti terikat yang antarmukanya disediakan oleh BindingContext properti . |
Properti
BindingContext |
Mendapatkan atau mengatur objek yang berisi properti yang akan ditargetkan oleh properti terikat milik ini BindableObject. |
Dispatcher |
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty. |
Metode
ApplyBindings() |
Terapkan pengikatan ke BindingContext. |
ClearValue(BindableProperty) |
Menghapus nilai apa pun yang ditetapkan oleh SetValue untuk |
ClearValue(BindablePropertyKey) |
Menghapus nilai apa pun yang ditetapkan oleh SetValue untuk properti yang diidentifikasi oleh |
CoerceValue(BindableProperty) |
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty. |
CoerceValue(BindablePropertyKey) |
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty. |
GetValue(BindableProperty) |
Mengembalikan nilai yang terkandung dalam BindableProperty. |
GetValues(BindableProperty, BindableProperty, BindableProperty) |
Kedaluwarsa.
Untuk penggunaan internal oleh Xamarin. Forms platform. |
GetValues(BindableProperty, BindableProperty) |
Kedaluwarsa.
Untuk penggunaan internal oleh Xamarin. Forms platform. |
IsSet(BindableProperty) |
Mengembalikan |
OnBindingContextChanged() |
Ambil alih metode ini untuk menjalankan tindakan ketika BindingContext berubah. |
OnPropertyChanged(String) |
Panggil metode ini dari kelas anak untuk memberi tahu bahwa perubahan terjadi pada properti. |
OnPropertyChanging(String) |
Panggil metode ini dari kelas anak untuk memberi tahu bahwa perubahan akan terjadi pada properti. |
RemoveBinding(BindableProperty) |
Menghapus pengikatan yang ditetapkan sebelumnya. |
SetBinding(BindableProperty, BindingBase) |
Menetapkan pengikatan ke properti. |
SetInheritedBindingContext(BindableObject, Object) |
Mengatur konteks yang diwariskan ke elemen berlapis. |
SetValue(BindableProperty, Object) |
Mengatur nilai properti yang ditentukan. |
SetValue(BindablePropertyKey, Object) |
Mengatur nilai propertyKey. |
SetValueCore(BindableProperty, Object, SetValueFlags) |
Untuk penggunaan internal oleh Xamarin. Forms platform. |
UnapplyBindings() |
Membatalkan semua pengikatan yang ditetapkan sebelumnya. |
Acara
BindingContextChanged |
Dimunculkan setiap kali BindingContext properti berubah. |
PropertyChanged |
Dimunculkan ketika properti telah berubah. |
PropertyChanging |
Dimunculkan ketika properti akan berubah. |
Implementasi Antarmuka Eksplisit
IDynamicResourceHandler.SetDynamicResource(BindableProperty, String) |
Untuk penggunaan internal oleh Xamarin. Forms platform. |
Metode Ekstensi
GetPropertyIfSet<T>(BindableObject, BindableProperty, T) |
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty. |
SetAppThemeColor(BindableObject, BindableProperty, Color, Color) |
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty. |
SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String) |
Membuat dan menerapkan pengikatan ke properti. |
SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String) |
Kedaluwarsa.
Membuat dan menerapkan pengikatan dari ekspresi. |
SetOnAppTheme<T>(BindableObject, BindableProperty, T, T) |
Menyediakan mekanisme di mana pengembang aplikasi dapat menyebarluaskan perubahan yang dilakukan pada data dalam satu objek ke objek lain, dengan mengaktifkan validasi, koersi jenis, dan sistem peristiwa. BindableProperty. |