Bagikan melalui


BindableObject Kelas

Definisi

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.Object
BindableObject
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 MockBindableMockViewModel, 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 property.

ClearValue(BindablePropertyKey)

Menghapus nilai apa pun yang ditetapkan oleh SetValue untuk properti yang diidentifikasi oleh propertyKey.

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)
Kedaluwarsa.

Untuk penggunaan internal oleh Xamarin. Forms platform.

GetValues(BindableProperty, BindableProperty, BindableProperty)
Kedaluwarsa.

Untuk penggunaan internal oleh Xamarin. Forms platform.

IsSet(BindableProperty)

Mengembalikan true jika properti target ada dan telah ditetapkan.

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.

Berlaku untuk