BindableObject Classe

Définition

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler
Héritage
System.Object
BindableObject
Dérivé
Implémente
System.ComponentModel.INotifyPropertyChanged IDynamicResourceHandler

Remarques

La BindableObject classe fournit un mécanisme de stockage de données qui permet au développeur d’applications de synchroniser des données entre des objets en réponse à des modifications, par exemple, entre l’affichage et le modèle d’affichage dans le modèle de conception MVVM. Tous les éléments visuels de l’espace de noms héritent de BindableObject la Xamarin.Forms classe, de sorte qu’ils peuvent tous être utilisés pour lier les données derrière leurs éléments d’interface utilisateur à Afficher les modèles fournis par le développeur d’application.

Pour lier les données derrière une propriété dans un BindableObject, généralement une vue, à une propriété dans le modèle d’affichage, les développeurs d’applications doivent effectuer les opérations suivantes.

Tout d’abord, le développeur crée une paire de propriétés sur la vue, dont l’une est un BindableProperty, et l’autre une propriété de tout type requis. Dans le code ci-dessous, MockBindableObject correspond à ce qui serait généralement un objet d’interface utilisateur dans le code de production. Les développeurs d’applications doivent noter l’utilisation de SetValue(BindableProperty, Object) et GetValue(BindableProperty) pour obtenir et définir la valeur sur la propriété liée ; La propriété du type souhaité fournit l’interface que la cible de la propriété liée va implémenter.

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

Deuxièmement, le développeur crée l’implémentation de la propriété liée dans une classe qui implémente l’interface System.ComponentModel.INotifyPropertyChanged . Dans le modèle de conception MVVM, cela est généralement effectué par le modèle d’affichage. Les développeurs d’applications doivent implémenter l’interface System.ComponentModel.INotifyPropertyChanged sur les classes qu’ils souhaitent utiliser en tant que modèles d’affichage. Dans l’exemple ci-dessous, les développeurs d’applications doivent prendre note de la façon idiomatique dans laquelle la Name propriété est implémentée, tout d’abord, s’assurer que la propriété a réellement changé et qu’elle retourne si ce n’est pas le cas, puis seulement affecter la valeur et appeler la OnPropertyChanged(String) méthode. En outre, la Name propriété de l’exemple ci-dessous encapsule simplement le name champ. Dans la pratique, le développeur d’applications peut choisir un autre modèle dans lequel stocker les données d’application.

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

Troisièmement, et enfin, le développeur d’applications lie un instance d’un BindableObject à un instance qui implémente INotifyPropertyChanged. Dans le vocabulaire du modèle de conception MVVM, il s’agit de « lier un instance de la vue à un instance d’un modèle d’affichage ». Une fois cette étape terminée, les modifications apportées aux données sont propagées entre l’affichage et le modèle d’affichage d’une manière déterminée par la valeur de l’énumération, le BindingMode cas échéant, qui a été passée pendant l’étape de liaison.

Le code ci-dessous, lorsqu’il est inclus dans un projet qui fait référence aux classes ci-dessus, crée une instance de MockBindableMockViewModelet , effectue une intitiation, définit la liaison, puis illustre une liaison unidirectionnelle. Le code ci-dessous s’exécute sans lever d’exception.

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

Constructeurs

BindableObject()

Initialise une nouvelle instance de la classe BindableObject.

Champs

BindingContextProperty

Implémente la propriété liée dont l’interface est fournie par la propriété BindingContext.

Propriétés

BindingContext

Obtient ou définit l’objet qui contient les propriétés qui seront ciblées par les propriétés liées appartenant à ce BindableObject.

Dispatcher

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

Méthodes

ApplyBindings()

Applique les liaisons à BindingContext.

ClearValue(BindableProperty)

Efface toute valeur définie par SetValue pour property.

ClearValue(BindablePropertyKey)

Efface toute valeur définie par SetValue pour la propriété qui est identifiée par propertyKey.

CoerceValue(BindableProperty)

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

CoerceValue(BindablePropertyKey)

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

GetValue(BindableProperty)

Retourne la valeur qui est contenue dans BindableProperty.

GetValues(BindableProperty, BindableProperty)
Obsolète.

Pour un usage interne par la plateforme Xamarin.Forms.

GetValues(BindableProperty, BindableProperty, BindableProperty)
Obsolète.

Pour un usage interne par la plateforme Xamarin.Forms.

IsSet(BindableProperty)

Retourne true si la propriété cible existe et qu’elle a été configurée.

OnBindingContextChanged()

Substituez cette méthode pour exécuter une action lorsque le BindingContext change.

OnPropertyChanged(String)

Appelez cette méthode à partir d’une classe enfant pour avertir qu’un changement s’est produit au niveau d’une propriété.

OnPropertyChanging(String)

Appelez cette méthode à partir d’une classe enfant pour avertir qu’un changement va se produire au niveau d’une propriété.

RemoveBinding(BindableProperty)

Supprime une liaison précédemment définie.

SetBinding(BindableProperty, BindingBase)

Affecte une liaison à une propriété.

SetInheritedBindingContext(BindableObject, Object)

Définit le contexte hérité sur un élément imbriqué.

SetValue(BindableProperty, Object)

Définit la valeur de la propriété spécifiée.

SetValue(BindablePropertyKey, Object)

Définit la valeur de propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

Pour un usage interne par la plateforme Xamarin.Forms.

UnapplyBindings()

Supprime toutes les liaisons précédemment définies.

Événements

BindingContextChanged

Déclenché chaque fois que la propriété BindingContext est modifiée.

PropertyChanged

Déclenché lorsqu’une propriété a été modifiée.

PropertyChanging

Déclenché lorsqu’une propriété est sur le point d’être modifiée.

Implémentations d’interfaces explicites

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Pour un usage interne par la plateforme Xamarin.Forms.

Méthodes d’extension

GetPropertyIfSet<T>(BindableObject, BindableProperty, T)

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

SetAppThemeColor(BindableObject, BindableProperty, Color, Color)

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

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

Crée et applique une liaison à une propriété.

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

Crée et applique une liaison à partir d’une expression.

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

Fournit un mécanisme par lequel les développeurs d’applications peuvent propager les modifications qui sont apportées aux données d’un objet vers un autre objet, en activant la validation, le forçage de type et un système d’événements. BindableProperty.

S’applique à