BindableObject Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.ObjectBindableObject
- 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 MockBindable
MockViewModel
et , 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 |
ClearValue(BindablePropertyKey) |
Efface toute valeur définie par SetValue pour la propriété qui est identifiée par |
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, BindableProperty) |
Obsolète.
Pour un usage interne par la plateforme Xamarin.Forms. |
GetValues(BindableProperty, BindableProperty) |
Obsolète.
Pour un usage interne par la plateforme Xamarin.Forms. |
IsSet(BindableProperty) |
Retourne |
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. |