BindableObject Klasa

Definicja

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system 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

Klasa BindableObject udostępnia mechanizm przechowywania danych, który umożliwia deweloperowi aplikacji synchronizowanie danych między obiektami w odpowiedzi na zmiany, na przykład między modelem widoku i widoku we wzorcu projektu MVVM. Wszystkie elementy wizualne w Xamarin.Forms przestrzeni nazw dziedziczą po BindableObject klasie, dzięki czemu mogą służyć do powiązania danych za elementami interfejsu użytkownika z elementami widoku modeli dostarczanych przez dewelopera aplikacji.

Aby powiązać dane za właściwością w BindableObjectwidoku , zazwyczaj 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 jedna jest właściwością BindableProperty, a druga jest właściwością dowolnego typu. W poniższym kodzie oznacza to, MockBindableObject co zwykle byłoby obiektem interfejsu użytkownika w kodzie produkcyjnym. Deweloperzy aplikacji powinni zwrócić uwagę na użycie SetValue(BindableProperty, Object) właściwości i GetValue(BindableProperty) , aby uzyskać i ustawić wartość dla powiązanej właściwości; Właściwość żądanego typu udostępnia interfejs, który zostanie zaimplementowany przez obiekt docelowy powiązanej właściwości.

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

Po drugie deweloper tworzy implementację właściwości powiązanej w klasie, która implementuje INotifyPropertyChanged interfejs. W wzorcu projektowym MVVM jest to zwykle wykonywane przez model widoku. Deweloperzy aplikacji powinni zaimplementować INotifyPropertyChanged interfejs dla klas, których chcą używać jako modele widoku. W poniższym przykładzie deweloperzy aplikacji powinni zwrócić uwagę na idiomatyczny sposób Name implementacji właściwości, najpierw upewnij się, że właściwość została rzeczywiście zmieniona i zwrócona, jeśli nie, a następnie przypisać wartość i wywołać metodę OnPropertyChanged(String) . Ponadto właściwość w poniższym przykładzie jedynie Name zawija name pole. W praktyce deweloper aplikacji może wybrać inny model, w którym mają być 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));
    }
}

Po trzecie, a na koniec deweloper aplikacji wiąże wystąpienie obiektu BindableObject z wystąpieniem implementujące element INotifyPropertyChanged. W słownictwie wzorca projektu MVVM jest to "powiązanie wystąpienia widoku z wystąpieniem modelu widoku". Po zakończeniu tego kroku zmiany w danych są propagowane między modelem Widok i Widok w sposób określony przez wartość BindingMode wyliczenia, jeśli istnieje, który został przekazany podczas kroku powiązania.

Poniższy kod, jeśli został uwzględniony w projekcie odwołującym się do powyższych klas, tworzy wystąpienie metody MockBindable i MockViewModel, wykonuje pewne intitializacja, ustawia powiązanie, a następnie demonstruje 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ązana, której interfejs jest dostarczany przez BindingContext właściwość .

Właściwości

BindingContext

Pobiera lub ustawia obiekt zawierający właściwości, które będą objęte powiązanymi właściwościami należącymi do tego BindableObjectobiektu .

Dispatcher

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.

Metody

ApplyBindings()

Zastosuj powiązania do BindingContextelementu .

ClearValue(BindableProperty)

Czyści dowolną wartość ustawioną przez SetValue dla elementu property.

ClearValue(BindablePropertyKey)

Czyści dowolną wartość ustawioną SetValue przez dla właściwości, która jest identyfikowana przez propertyKeyelement .

CoerceValue(BindableProperty)

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.

CoerceValue(BindablePropertyKey)

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.

GetValue(BindableProperty)

Zwraca wartość zawartą w właściwości 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 wartość true , jeśli właściwość docelowa istnieje i została ustawiona.

OnBindingContextChanged()

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

OnPropertyChanged(String)

Wywołaj tę metodę z klasy podrzędnej, aby powiadomić, że zmiana nastąpiła we właściwości.

OnPropertyChanging(String)

Wywołaj tę metodę z klasy podrzędnej, aby powiadomić, że w właściwości nastąpi zmiana.

RemoveBinding(BindableProperty)

Usuwa wcześniej 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ść właściwościKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

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

UnapplyBindings()

Usuwa wszystkie wcześniej ustawione powiązania.

Zdarzenia

BindingContextChanged

Podniesione za każdym razem, BindingContext gdy właściwość ulegnie zmianie.

PropertyChanged

Podniesione, gdy właściwość uległa zmianie.

PropertyChanging

Podniesione, gdy właściwość ma ulec zmianie.

Jawne implementacje interfejsu

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

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

Metody rozszerzania

GetPropertyIfSet<T>(BindableObject, BindableProperty, T)

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.

SetAppThemeColor(BindableObject, BindableProperty, Color, Color)

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.

SetBinding(BindableObject, BindableProperty, String, BindingMode, IValueConverter, String)

Tworzy i stosuje powiązanie do 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)

Zapewnia mechanizm, za pomocą którego deweloperzy aplikacji mogą propagować zmiany wprowadzane do danych w jednym obiekcie do innego, włączając walidację, wymuszanie typu i system zdarzeń. BindableProperty.

Dotyczy