Compartir a través de


BindableObject Clase

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. BindableProperty.

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

Comentarios

La BindableObject clase proporciona un mecanismo de almacenamiento de datos que permite al desarrollador de aplicaciones sincronizar los datos entre objetos en respuesta a los cambios, por ejemplo, entre el modelo de vista y vista en el patrón de diseño de MVVM. Todos los elementos visuales del espacio de nombres heredan de BindableObject la Xamarin.Forms clase , por lo que todos se pueden usar para enlazar los datos detrás de sus elementos de la interfaz de usuario a Los modelos de vista proporcionados por el desarrollador de aplicaciones.

Para enlazar los datos detrás de una propiedad en , BindableObjectnormalmente una vista, a una propiedad en el modelo de vista, los desarrolladores de aplicaciones deben hacer lo siguiente.

En primer lugar, el desarrollador crea un par de propiedades en la vista, una de las cuales es , BindablePropertyy la otra de las cuales es una propiedad de cualquier tipo que se requiera. En el código siguiente, MockBindableObject significa lo que normalmente sería un objeto de interfaz de usuario en el código de producción. Los desarrolladores de aplicaciones deben tener en cuenta el uso de SetValue(BindableProperty, Object) y GetValue(BindableProperty) para obtener y establecer el valor en la propiedad enlazada; La propiedad del tipo deseado proporciona la interfaz que implementará el destino de la propiedad enlazada.

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 la System.ComponentModel.INotifyPropertyChanged interfaz . En el patrón de diseño de MVVM, normalmente lo hace el modelo de vista. Los desarrolladores de aplicaciones deben implementar la System.ComponentModel.INotifyPropertyChanged interfaz en las clases que quieren usar como modelos de vista. En el ejemplo siguiente, los desarrolladores de aplicaciones deben tomar nota de la forma idiomática en la que se implementa la Name propiedad, en primer lugar, asegurarse de que la propiedad ha cambiado y devuelto realmente si no lo hizo, y solo asignar el valor y llamar al OnPropertyChanged(String) método . Además, la Name propiedad del ejemplo siguiente simplemente ajusta el name campo. En la práctica, el desarrollador de aplicaciones puede elegir un modelo diferente en el que almacenar los datos de la aplicación.

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 aplicaciones enlaza una instancia de BindableObject a una instancia que implementa INotifyPropertyChanged. En el vocabulario del patrón de diseño de MVVM, se trata de "enlazar una instancia de la vista a una instancia de un modelo de vista". Una vez completado este paso, los cambios en los datos se propagan entre el modelo de vista y vista de una manera determinada por el valor de la BindingMode enumeración, si existe, que se pasó durante el paso de enlace.

El código siguiente, cuando se incluye en un proyecto que hace referencia a las clases anteriores, crea una instancia de MockBindable y MockViewModel, realiza alguna inicialización, establece el enlace y, a continuación, muestra un enlace unidireccional. El código siguiente se ejecuta sin producir una excepción.

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

Inicializa una nueva instancia de la clase BindableObject.

Campos

BindingContextProperty

Implementa la propiedad enlazada cuya interfaz proporciona la propiedad BindingContext.

Propiedades

BindingContext

Obtiene o establece el objeto que contiene las propiedades que van a dirigir las propiedades enlazadas que pertenecen a este BindableObject.

Dispatcher

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. BindableProperty.

Métodos

ApplyBindings()

Aplica los enlaces a BindingContext.

ClearValue(BindableProperty)

Borra cualquier valor establecido por SetValue para property.

ClearValue(BindablePropertyKey)

Borra cualquier valor establecido por SetValue para la propiedad que propertyKey identifica.

CoerceValue(BindableProperty)

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. BindableProperty.

CoerceValue(BindablePropertyKey)

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. BindableProperty.

GetValue(BindableProperty)

Devuelve el valor contenido en la propiedad BindableProperty.

GetValues(BindableProperty, BindableProperty, BindableProperty)
Obsoletos.

Para uso interno de la plataforma de Xamarin.Forms.

GetValues(BindableProperty, BindableProperty)
Obsoletos.

Para uso interno de la plataforma de Xamarin.Forms.

IsSet(BindableProperty)

Devuelve true si existe y se ha establecido la propiedad de destino.

OnBindingContextChanged()

Reemplaza este método para ejecutar una acción cuando BindingContext cambia.

OnPropertyChanged(String)

Llama a este método desde una clase secundaria para notificar que se produjo un cambio en una propiedad.

OnPropertyChanging(String)

Llama a este método desde una clase secundaria para notificar que se va a producir un cambio en una propiedad.

RemoveBinding(BindableProperty)

Quita un enlace definida previamente.

SetBinding(BindableProperty, BindingBase)

Asigna un enlace a una propiedad.

SetInheritedBindingContext(BindableObject, Object)

Establece el contexto heredado en un elemento anidado.

SetValue(BindableProperty, Object)

Establece el valor de la propiedad especificada.

SetValue(BindablePropertyKey, Object)

Establece el valor de la propiedad propertyKey.

SetValueCore(BindableProperty, Object, SetValueFlags)

Para uso interno de la plataforma de Xamarin.Forms.

UnapplyBindings()

Deshace todos los enlaces establecidos previamente.

Eventos

BindingContextChanged

Se produce siempre que cambia la propiedad BindingContext.

PropertyChanged

Se produce cuando ha cambiado una propiedad.

PropertyChanging

Se produce cuando una propiedad está a punto de cambiar.

Implementaciones de interfaz explícitas

IDynamicResourceHandler.SetDynamicResource(BindableProperty, String)

Para uso interno de la plataforma de Xamarin.Forms.

Métodos de extensión

GetPropertyIfSet<T>(BindableObject, BindableProperty, T)

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. BindableProperty.

SetAppThemeColor(BindableObject, BindableProperty, Color, Color)

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. BindableProperty.

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

Crea y aplica un enlace a una propiedad.

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

Crea y aplica un enlace desde una expresión.

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

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. BindableProperty.

Se aplica a