BindableObject BindableObject Class

Definición

Proporciona un mecanismo con el que los desarrolladores de aplicaciones pueden propagar los cambios que se realizan en datos de un objeto a otro, habilitando la validación, la conversión de tipos y un sistema de eventos.Provides a mechanism by which application developers can propagate changes that are made to data in one object to another, by enabling validation, type coercion, and an event system. BindableProperty.BindableProperty.

public abstract class BindableObject : System.ComponentModel.INotifyPropertyChanged, Xamarin.Forms.Internals.IDynamicResourceHandler
type BindableObject = class
    interface INotifyPropertyChanged
    interface IDynamicResourceHandler
Herencia
BindableObjectBindableObject
Derivado
Implementaciones

Comentarios

La BindableObject clase proporciona un mecanismo de almacenamiento de datos que permite que el desarrollador de aplicaciones sincronizar datos entre los objetos en respuesta a cambios, por ejemplo, entre la vista y el modelo de vista en el patrón de diseño MVVM.The BindableObject class provides a data storage mechanism that enables the application developer to synchronize data between objects in response to changes, for example, between the View and View Model in the MVVM design pattern. Todos los elementos visuales en el Xamarin.Forms heredar el espacio de nombres BindableObject clase, por lo que pueden utilizarse para enlazar los datos subyacentes a sus elementos de interfaz de usuario para los modelos de vista proporcionados por el desarrollador de aplicaciones.All of the visual elements in the Xamarin.Forms namespace inherit from BindableObject class, so they can all be used to bind the data behind their user interface elements to View Models that are supplied by the application developer.

Para enlazar los datos detrás de una propiedad en un BindableObject, normalmente una vista a una propiedad en la vista de los desarrolladores de modelos, la aplicación deben hacer lo siguiente.To bind the data behind a property in a BindableObject, typically a view, to a property in the View Model, application developers should do the following.

En primer lugar, el desarrollador crea un par de propiedades en la vista, uno de los cuales es un BindableProperty, y el otro es una propiedad de cualquier tipo es obligatorio.First, the developer creates a pair of properties on the view, one of which is a BindableProperty, and the other of which is a property of whatever type is required. En el código siguiente, MockBindableObject reemplaza lo que normalmente sería un objeto de interfaz de usuario en código de producción.In the code below, MockBindableObject stands in for what would typically be a user interface object in production code. Los desarrolladores de aplicaciones deben tener en cuenta el uso de SetValue(BindableProperty, Object) y GetValue(BindableProperty) para obtener y establecer el valor de la propiedad enlazada; La propiedad del tipo deseado proporciona la interfaz que implementará el destino de la propiedad enlazada.Application developers should note the use of SetValue(BindableProperty, Object) and GetValue(BindableProperty) to get and set the value on the bound property; The property of the desired type provides the interface that the target of the bound property will implement.


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

En segundo lugar, el desarrollador crea la implementación de la propiedad enlazada en una clase que implementa el INotifyPropertyChanged interfaz.Second, the developer creates the implementation for the bound property in a class that implements the INotifyPropertyChanged interface. En el patrón de diseño MVVM, esto se hace normalmente por el modelo de vista.In the MVVM design pattern, this is typically done by the View Model. Los desarrolladores de aplicaciones deben implementar la INotifyPropertyChanged interfaz en las clases que va a usar como modelos de vista.Application developers should implement the INotifyPropertyChanged interface on classes that they want to use as View Models. En el ejemplo siguiente, los desarrolladores de aplicaciones deben tome nota de la idiomático forma en que el nombre propiedad se implementa para, en primer lugar, asegúrese de que la propiedad realmente cambiaron y valor devuelto si no lo hiciera y solo, a continuación, asigne el valor y llamar a la OnPropertyChanged(String) método.In the example below, app developers should take note of the idiomatic way that the Name property is implemented to, first, ensure that the property actually changed and return if it did not, and only then assign the value and call the OnPropertyChanged(String) method. Además, el nombre propiedad en el ejemplo siguiente simplemente ajusta el nombre campo.Additionally, the Name property in the example below merely wraps the name field. En la práctica, el desarrollador de aplicaciones puede elegir un modelo diferente en el que se va a almacenar datos de aplicación.In practice, the application developer may choose a different model in which to store application data.


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

En tercer lugar y por último, el desarrollador de la aplicación enlaza una instancia de un BindableObject a una instancia que implementa INotifyPropertyChanged.Third, and finally, the application developer binds an instance of a BindableObject to an instance that implements INotifyPropertyChanged. En el vocabulario del patrón de diseño MVVM, esto es "enlace una instancia de la vista a una instancia de un modelo de vista."In the vocabulary of the MVVM design pattern, this is "binding an instance of the View to an instance of a View Model." Una vez completado este paso, se propagan los cambios en los datos entre la vista y el modelo de vista de forma que viene determinada por el valor de la BindingMode enumeración, si hay alguno, que se pasó durante el paso de enlace.Once this step is complete, changes in the data are propagated between the View and View Model in a way that is determined by the value of the BindingMode enumeration, if any, that was passed during the binding step.

El código a continuación, cuando se incluye en un proyecto que hacen referencia a las clases anteriores, crea una instancia de ambos MockBindable y MockViewModel, realiza alguna inicialización, Establece el enlace y, a continuación, se muestra un enlace unidireccional.The code below, when included in a project that reference the classes above, creates an instance of both MockBindable and MockViewModel, performs some intitialization, sets the binding, and then demonstrates a one-way binding. El código siguiente se ejecuta sin producir una excepción.The code below runs without throwing an 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 ();
}

Constructores

BindableObject() BindableObject()

Inicializa una nueva instancia de la clase BindableObject.Initializes a new instance of the BindableObject class.

Campos

BindingContextProperty BindingContextProperty

Implementa la propiedad enlazada cuya interfaz proporciona la propiedad BindingContext.Implements the bound property whose interface is provided by the BindingContext property.

Propiedades

BindingContext BindingContext

Obtiene o establece el objeto que contiene las propiedades que van a dirigir las propiedades enlazadas que pertenecen a este BindableObject.Gets or sets object that contains the properties that will be targeted by the bound properties that belong to this BindableObject.

Métodos

ApplyBindings() ApplyBindings()

Aplica los enlaces a BindingContext.Apply the bindings to BindingContext.

ClearValue(BindableProperty) ClearValue(BindableProperty)

Borra cualquier valor establecido por SetValue para property.Clears any value set by SetValue for property.

ClearValue(BindablePropertyKey) ClearValue(BindablePropertyKey)

Borra cualquier valor establecido por SetValue para la propiedad que propertyKey identifica.Clears any value set by SetValue for the property that is identified by propertyKey.

GetValue(BindableProperty) GetValue(BindableProperty)

Devuelve el valor contenido en la propiedad BindableProperty.Returns the value that is contained in the BindableProperty.

GetValues(BindableProperty, BindableProperty) GetValues(BindableProperty, BindableProperty)

Para uso interno de la plataforma de Xamarin.Forms.For internal use by the Xamarin.Forms platform.

GetValues(BindableProperty, BindableProperty, BindableProperty) GetValues(BindableProperty, BindableProperty, BindableProperty)

Para uso interno de la plataforma de Xamarin.Forms.For internal use by the Xamarin.Forms platform.

IsSet(BindableProperty) IsSet(BindableProperty)

Devuelve true si existe y se ha establecido la propiedad de destino.Returns true if the target property exists and has been set.

OnBindingContextChanged() OnBindingContextChanged()

Reemplaza este método para ejecutar una acción cuando BindingContext cambia.Override this method to execute an action when the BindingContext changes.

OnPropertyChanged(String) OnPropertyChanged(String)

Llama a este método desde una clase secundaria para notificar que se produjo un cambio en una propiedad.Call this method from a child class to notify that a change happened on a property.

OnPropertyChanging(String) OnPropertyChanging(String)

Llama a este método desde una clase secundaria para notificar que se va a producir un cambio en una propiedad.Call this method from a child class to notify that a change is going to happen on a property.

RemoveBinding(BindableProperty) RemoveBinding(BindableProperty)

Quita un enlace definida previamente.Removes a previously set binding.

SetBinding(BindableProperty, BindingBase) SetBinding(BindableProperty, BindingBase)

Asigna un enlace a una propiedad.Assigns a binding to a property.

SetInheritedBindingContext(BindableObject, Object) SetInheritedBindingContext(BindableObject, Object)

Establece el contexto heredado en un elemento anidado.Sets the inherited context to a nested element.

SetValue(BindableProperty, Object) SetValue(BindableProperty, Object)

Establece el valor de la propiedad especificada.Sets the value of the specified property.

SetValue(BindablePropertyKey, Object) SetValue(BindablePropertyKey, Object)

Establece el valor de la propiedad propertyKey.Sets the value of the propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags) SetValueCore(BindableProperty, Object, SetValueFlags)

Para uso interno de la plataforma de Xamarin.Forms.For internal use by the Xamarin.Forms platform.

UnapplyBindings() UnapplyBindings()

Deshace todos los enlaces establecidos previamente.Unapplies all previously set bindings.

Eventos

BindingContextChanged BindingContextChanged

Se produce siempre que cambia la propiedad BindingContext.Raised whenever the BindingContext property changes.

PropertyChanged PropertyChanged

Se produce cuando ha cambiado una propiedad.Raised when a property has changed.

PropertyChanging PropertyChanging

Se produce cuando una propiedad está a punto de cambiar.Raised when a property is about to change.

Implementaciones de interfaz explícitas

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String) IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Para uso interno de la plataforma de Xamarin.Forms.For internal use by the Xamarin.Forms platform.

Extension Methods

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

Crea y aplica un enlace a una propiedad.Creates and applies a binding to a property.

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

Crea y aplica un enlace desde una expresión.Creates and applies a binding from an expression.

Se aplica a