BindableObject Klasa

Definicja

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie, przez włączenie walidacji, przekształcenie typu i systemu zdarzeń. BindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler
Dziedziczenie
BindableObject
Pochodne
Implementuje

Uwagi

BindableObjectKlasa zapewnia mechanizm magazynowania danych, który umożliwia deweloperom aplikacji synchronizowanie danych między obiektami w odpowiedzi na zmiany, na przykład między modelem widoku i widokiem w wzorcu projektowym MVVM. Wszystkie elementy wizualizacji w Xamarin.Forms przestrzeni nazw dziedziczą z BindableObject klasy, aby można było ich użyć do powiązania danych za ich elementami interfejsu użytkownika w celu wyświetlenia modeli dostarczanych przez dewelopera aplikacji.

Aby powiązać dane za właściwością w BindableObject , zazwyczaj widokiem, z właściwością w modelu widoku, deweloperzy aplikacji powinni wykonać następujące czynności.

Najpierw deweloper tworzy parę właściwości w widoku, z których jeden jest BindableProperty , a drugi jest właściwością dowolnego typu. W poniższym kodzie MockBindableObject się na to, co zazwyczaj jest obiektem interfejsu użytkownika w kodzie produkcyjnym. Deweloperzy aplikacji powinni zauważyć użycie SetValue(BindableProperty, Object) i GetValue(BindableProperty) Aby uzyskać i ustawić wartość właściwości powiązanej; Właściwość żądanego typu udostępnia interfejs, który zostanie zaimplementowany przez obiekt docelowy właściwości powiązanej.

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); }
    }
}

Następnie deweloper tworzy implementację powiązanej właściwości w klasie, która implementuje INotifyPropertyChanged interfejs. We wzorcu projektowym MVVM jest to zwykle wykonywane przez model widoku. Deweloperzy aplikacji powinni zaimplementować INotifyPropertyChanged interfejs na klasach, które chcą używać jako modeli widoku. W poniższym przykładzie deweloperzy aplikacji powinni zanotować idiomatyczne sposób, w jaki Właściwość name jest zaimplementowana do, najpierw upewnij się, że właściwość rzeczywiście zmieniła się i zwróci wartość, jeśli nie, a następnie przypisze OnPropertyChanged(String) metodę. Ponadto Właściwość name w poniższym przykładzie powoduje Zawijanie pola name . W tym celu Deweloper aplikacji może wybrać inny model, w którym będą przechowywane dane aplikacji.

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));
    }
}

Trzeci, a wreszcie, Deweloper aplikacji wiąże wystąpienie BindableObject z wystąpieniem implementującym INotifyPropertyChanged. W słowniku wzorca projektowego MVVM jest to "wiązanie wystąpienia widoku z wystąpieniem modelu widoku". Po zakończeniu tego kroku zmiany danych są propagowane między widokiem i modelem widoku w taki sposób, który jest określany przez wartość BindingMode wyliczenia (jeśli istnieje), która została przeniesiona podczas kroku powiązania.

Poniższy kod, gdy jest zawarty w projekcie, który odwołuje się do klas powyżej, tworzy wystąpienie zarówno MockBindable , jak i MockViewModel, wykonuje niektóre intitialization, ustawia powiązanie, a następnie pokazuje powiązanie jednokierunkowe. Poniższy kod jest uruchamiany bez zgłaszania wyjątku.

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 ();
}

Konstruktory

BindableObject()

Inicjuje nowe wystąpienie klasy BindableObject.

Pola

BindingContextProperty

Implementuje Właściwość powiązaną, której interfejs jest dostarczany przez BindingContext Właściwość.

Właściwości

BindingContext

Pobiera lub ustawia obiekt, który zawiera właściwości, które będą wskazywane przez powiązane właściwości należące do tego BindableObject .

Dispatcher

Metody

ApplyBindings()

Zastosuj powiązania do BindingContext .

ClearValue(BindableProperty)

Czyści każdą wartość ustawioną przez SetValue for property .

ClearValue(BindablePropertyKey)

Czyści każdą wartość ustawioną przez SetValue Właściwość, która jest identyfikowana przez propertyKey .

CoerceValue(BindableProperty)
CoerceValue(BindablePropertyKey)
GetValue(BindableProperty)

Zwraca wartość, która jest zawarta w BindableProperty.

GetValues(BindableProperty, BindableProperty)
Nieaktualne.

Do użytku wewnętrznego przez platformę Xamarin. Forms.

GetValues(BindableProperty, BindableProperty, BindableProperty)
Nieaktualne.

Do użytku wewnętrznego przez platformę Xamarin. Forms.

IsSet(BindableProperty)

Zwraca true czy właściwość target istnieje i została ustawiona.

OnBindingContextChanged()

Zastąp tę metodę, aby wykonać akcję po zmianie BindingContext.

OnPropertyChanged(String)

Wywołaj tę metodę z klasy podrzędnej, aby powiadomić o wystąpieniu zmiany we właściwości.

OnPropertyChanging(String)

Wywołaj tę metodę z klasy podrzędnej, aby powiadomić, że zmiana ma miejsce na właściwości.

RemoveBinding(BindableProperty)

Usuwa poprzednio ustawione powiązanie.

SetBinding(BindableProperty, BindingBase)

Przypisuje powiązanie do właściwości.

SetInheritedBindingContext(BindableObject, Object)

Ustawia Dziedziczony kontekst na zagnieżdżony element.

SetValue(BindableProperty, Object)

Ustawia wartość określonej właściwości.

SetValue(BindablePropertyKey, Object)

Ustawia wartość propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

Do użytku wewnętrznego przez platformę Xamarin. Forms.

UnapplyBindings()

Nie stosuje wszystkich wcześniej ustawionych powiązań.

Zdarzenia

BindingContextChanged

Uruchamiany zawsze, gdy BindingContext Właściwość zostanie zmieniona.

PropertyChanged

Uruchamiany, gdy właściwość zostanie zmieniona.

PropertyChanging

Uruchamiany, gdy właściwość zostanie zmieniona.

Jawne implementacje interfejsu

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Do użytku wewnętrznego przez platformę Xamarin. Forms.

Metody rozszerzania

GetPropertyIfSet<T>(BindableObject, BindableProperty, T)
SetAppThemeColor(BindableObject, BindableProperty, Color, Color)
SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String)

Tworzy i stosuje powiązanie z właściwością.

SetBinding<TSource>(BindableObject, BindableProperty, Expression<Func<TSource,Object>>, BindingMode, IValueConverter, String)
Nieaktualne.

Tworzy i stosuje powiązanie z wyrażenia.

SetOnAppTheme<T>(BindableObject, BindableProperty, T, T)

Dotyczy