Vue d'ensemble des sources de liaisonBinding Sources Overview

Dans la liaison de données, l’objet de source de liaison fait référence à l’objet à partir duquel vous obtenez des données.In data binding, the binding source object refers to the object you obtain data from. Cette rubrique décrit les types d’objets que vous pouvez utiliser comme source de liaison.This topic discusses the types of objects you can use as the binding source.

Types de source de liaisonBinding Source Types

La liaison de données Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) prend en charge les types de source de liaison suivants :Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) data binding supports the following binding source types:

Source de liaisonBinding Source DescriptionDescription
objets common language runtime (CLR)common language runtime (CLR) objects Vous pouvez lier des propriétés publiques, des sous-propriétés, ainsi que des indexeurs, de n’importe quel objet common language runtime (CLR).You can bind to public properties, sub-properties, as well as indexers, of any common language runtime (CLR) object. Le moteur de liaison utilise la réflexion CLR pour récupérer les valeurs des propriétés.The binding engine uses CLR reflection to get the values of the properties. Les objets qui implémentent ICustomTypeDescriptor ou ont un inscrit TypeDescriptionProvider fonctionnent également avec le moteur de liaison.Alternatively, objects that implement ICustomTypeDescriptor or have a registered TypeDescriptionProvider also work with the binding engine.

Pour plus d’informations sur la façon d’implémenter une classe qui peut servir de source de liaison, consultez la page Implémentation d’une classe pour la source de liaison plus loin dans cette rubrique.For more information about how to implement a class that can serve as a binding source, see Implementing a Class for the Binding Source later in this topic.
objets dynamiquesdynamic objects Vous pouvez lier aux propriétés et indexeurs disponibles d’un objet qui implémente l' IDynamicMetaObjectProvider interface.You can bind to available properties and indexers of an object that implements the IDynamicMetaObjectProvider interface. Si vous pouvez accéder au membre dans le code, vous pouvez lier celui-ci.If you can access the member in code, you can bind to it. Par exemple, si un objet dynamique vous permet d’accéder à un membre dans le code via someObjet.AProperty, vous pouvez le lier en affectant le chemin de liaison AProperty.For example, if a dynamic object enables you to access a member in code via someObjet.AProperty, you can bind to it by setting the binding path to AProperty.
Objets ADO.NETADO.NET objects Vous pouvez lier des objets ADO.NET, tels que DataTable.You can bind to ADO.NET objects, such as DataTable. Le ADO.NET DataView implémente l' IBindingList interface, qui fournit des notifications de modification que le moteur de liaison écoute.The ADO.NET DataView implements the IBindingList interface, which provides change notifications that the binding engine listens for.
Objets XMLXML.XMLXML objects Vous pouvez lier et XPath exécuter des requêtes sur un XmlNode, XmlDocumentou. XmlElementYou can bind to and run XPath queries on an XmlNode, XmlDocument, or XmlElement. Un moyen pratique d’accéder XMLXML aux données qui est la source de liaison dans le balisage XmlDataProvider consiste à utiliser un objet.A convenient way to access XMLXML data that is the binding source in markup is to use an XmlDataProvider object. Pour plus d’informations, consultez Effectuer une liaison à des données XML à l'aide d'un XMLDataProvider et de requêtes XPath.For more information, see Bind to XML Data Using an XMLDataProvider and XPath Queries.

Vous pouvez également effectuer une liaison XElement à XDocumentune ou à une liaison avec les résultats de requêtes exécutées sur des objets de ces types à l’aide de LINQ to XML.You can also bind to an XElement or XDocument, or bind to the results of queries run on objects of these types by using LINQ to XML. Un moyen pratique d’utiliser LINQ to XML pour accéder aux données XML qui est la source de liaison dans le balisage ObjectDataProvider consiste à utiliser un objet.A convenient way to use LINQ to XML to access XML data that is the binding source in markup is to use an ObjectDataProvider object. Pour plus d’informations, consultez Effectuer une liaison avec XDocument, XElement ou LINQ pour des résultats de requête XML.For more information, see Bind to XDocument, XElement, or LINQ for XML Query Results.
Objets DependencyObject.DependencyObject objects Vous pouvez lier aux propriétés de dépendance de DependencyObjectn’importe quel.You can bind to dependency properties of any DependencyObject. Pour obtenir un exemple, consultez Lier les propriétés de deux contrôles.For an example, see Bind the Properties of Two Controls.

Implémentation d’une classe pour la source de liaisonImplementing a Class for the Binding Source

Vous pouvez créer vos propres sources de liaison.You can create your own binding sources. Cette section décrit les éléments que vous devez connaître si vous implémentez une classe pour servir de source de liaison.This section discusses the things you need to know if you are implementing a class to serve as a binding source.

Fournir des notifications de modificationProviding Change Notifications

Si vous utilisez une OneWay liaison ou TwoWay (car vous souhaitez que votre Interface utilisateurUI se met à jour lorsque les propriétés de la source de liaison changent dynamiquement), vous devez implémenter un mécanisme de notification de modification de propriété approprié.If you are using either OneWay or TwoWay binding (because you want your Interface utilisateurUI to update when the binding source properties change dynamically), you must implement a suitable property changed notification mechanism. Le mécanisme recommandé est que le CLR ou la classe dynamique implémente INotifyPropertyChanged l’interface.The recommended mechanism is for the CLR or dynamic class to implement the INotifyPropertyChanged interface. Pour plus d’informations, consultez Implémenter la notification des modifications de propriétés.For more information, see Implement Property Change Notification.

Si vous créez un objet CLR qui n’implémente INotifyPropertyChangedpas, vous devez disposer de votre propre système de notification pour vous assurer que les données utilisées dans une liaison restent à jour.If you create a CLR object that does not implement INotifyPropertyChanged, then you must arrange for your own notification system to make sure that the data used in a binding stays current. Vous pouvez fournir des notifications de modification en prenant en charge le modèle PropertyChanged pour chaque propriété pour laquelle vous souhaitez obtenir des notifications de modification.You can provide change notifications by supporting the PropertyChanged pattern for each property that you want change notifications for. Pour prendre en charge ce modèle, vous définissez un événement PropertyNameChanged pour chaque propriété, où PropertyName est le nom de la propriété.To support this pattern, you define a PropertyNameChanged event for each property, where PropertyName is the name of the property. Vous déclenchez l’événement chaque fois que la propriété est modifiée.You raise the event every time the property changes.

Si votre source de liaison implémente un de ces mécanismes de notification, les mises à jour de la cible sont effectuées automatiquement.If your binding source implements one of these notification mechanisms, target updates happen automatically. Si, pour une raison quelconque, votre source de liaison ne fournit pas les notifications de modification de propriété appropriées, UpdateTarget vous avez la possibilité d’utiliser la méthode pour mettre à jour la propriété cible explicitement.If for any reason your binding source does not provide the proper property changed notifications, you have the option to use the UpdateTarget method to update the target property explicitly.

Autres caractéristiquesOther Characteristics

La liste suivante fournit d’autres points importants à noter :The following list provides other important points to note:

  • Si vous souhaitez créer l’objet dans XAMLXAML, la classe doit avoir un constructeur sans paramètre.If you want to create the object in XAMLXAML, the class must have a parameterless constructor. Dans certains langages .NET, tels C#que, le constructeur sans paramètre peut être créé pour vous.In some .NET languages, such as C#, the parameterless constructor might be created for you.

  • Les propriétés que vous utilisez comme propriétés de source de liaison pour une liaison doivent être des propriétés publiques de votre classe.The properties you use as binding source properties for a binding must be public properties of your class. Les propriétés d’interface explicitement définies ne sont pas accessibles pour la liaison, tout comme les propriétés protégées, privées, internes ou virtuelles qui n’ont aucune implémentation de base.Explicitly defined interface properties cannot be accessed for binding purposes, nor can protected, private, internal, or virtual properties that have no base implementation.

  • Vous ne pouvez pas lier des champs publics.You cannot bind to public fields.

  • Le type de la propriété déclarée dans votre classe est le type qui est passé à la liaison.The type of the property declared in your class is the type that is passed to the binding. Toutefois, le type utilisé par la liaison varie en fonction du type de propriété de cible de liaison, et non de la propriété de source de liaison.However, the type ultimately used by the binding depends on the type of the binding target property, not of the binding source property. S’il existe une différence de type, vous souhaiterez écrire un convertisseur pour gérer la manière dont votre propriété personnalisée est initialement passée à la liaison.If there is a difference in type, you might want to write a converter to handle how your custom property is initially passed to the binding. Pour plus d'informations, consultez IValueConverter.For more information, see IValueConverter.

Utilisation d’objets entiers comme source de liaisonUsing Entire Objects as a Binding Source

Vous pouvez utiliser un objet entier comme source de liaison.You can use an entire object as a binding source. Vous pouvez spécifier une source de liaison à l' Source aide de DataContext la propriété ou, puis fournir une déclaration de liaison {Binding}vide:.You can specify a binding source by using the Source or the DataContext property, and then provide a blank binding declaration: {Binding}. Les scénarios dans lesquels cela est utile incluent la liaison aux objets qui sont de type chaîne, la liaison à des objets ayant plusieurs propriétés qui vous intéressent ou une liaison à des objets de collection.Scenarios in which this is useful include binding to objects that are of type string, binding to objects with multiple properties you are interested in, or binding to collection objects. Pour obtenir un exemple de liaison à un objet de collection entier, consultez Utiliser le modèle maître/détail avec des données hiérarchiques.For an example of binding to an entire collection object, see Use the Master-Detail Pattern with Hierarchical Data.

Notez que vous devrez peut-être appliquer une logique personnalisée afin que les données soient significatives pour votre propriété cible liée aux données.Note that you may need to apply custom logic so that the data is meaningful to your bound target property. La logique personnalisée peut se présenter sous la forme d’un convertisseur personnalisé (si la DataTemplateconversion de type par défaut n’existe pas) ou de.The custom logic may be in the form of a custom converter (if default type conversion does not exist) or a DataTemplate. Pour plus d’informations sur les convertisseurs, consultez la section Conversion de données de Vue d'ensemble de la liaison de données.For more information about converters, see the Data Conversion section of Data Binding Overview. Pour plus d’informations sur les modèles de données, consultez Vue d’ensemble des modèles de données.For more information about data templates, see Data Templating Overview.

Utilisation d’objets de collection comme source de liaisonUsing Collection Objects as a Binding Source

Souvent, l’objet que vous souhaitez utiliser comme source de liaison est une collection d’objets personnalisés.Often, the object you want to use as the binding source is a collection of custom objects. Chaque objet sert de source pour une instance d’une liaison répétée.Each object serves as the source for one instance of a repeated binding. Par exemple, vous pouvez avoir une collection CustomerOrders qui se compose d’objets CustomerOrder où votre application effectue une itération sur la collection pour déterminer le nombre de commandes et les données contenues dans chacune d’entre elles.For example, you might have a CustomerOrders collection that consists of CustomerOrder objects, where your application iterates over the collection to determine how many orders exist and the data contained in each.

Vous pouvez énumérer n’importe quelle collection qui implémente IEnumerable l’interface.You can enumerate over any collection that implements the IEnumerable interface. Toutefois, pour configurer des liaisons dynamiques afin que les insertions ou les suppressions dans la collection Interface utilisateurUI mettent à jour automatiquement, la collection INotifyCollectionChanged doit implémenter l’interface.However, to set up dynamic bindings so that insertions or deletions in the collection update the Interface utilisateurUI automatically, the collection must implement the INotifyCollectionChanged interface. Cette interface expose un événement qui doit être déclenché chaque fois que la collection sous-jacente est modifiée.This interface exposes an event that must be raised whenever the underlying collection changes.

La ObservableCollection<T> classe est une implémentation intégrée d’une collection de données qui expose l' INotifyCollectionChanged interface.The ObservableCollection<T> class is a built-in implementation of a data collection that exposes the INotifyCollectionChanged interface. Les objets de données individuels dans la collection doivent satisfaire les spécifications décrites dans les sections précédentes.The individual data objects within the collection must satisfy the requirements described in the preceding sections. Pour obtenir un exemple, consultez Créer et effectuer une liaison à un ObservableCollection.For an example, see Create and Bind to an ObservableCollection. Avant d’implémenter votre propre collection, ObservableCollection<T> envisagez d’utiliser ou une des classes de List<T>collection existantes, BindingList<T>telles que, Collection<T>et, parmi de nombreuses autres.Before implementing your own collection, consider using ObservableCollection<T> or one of the existing collection classes, such as List<T>, Collection<T>, and BindingList<T>, among many others.

WPF ne lie jamais directement à la collection.WPF never binds directly to a collection. Si vous spécifiez une collection comme source de liaison, WPF lie plutôt à la vue par défaut de la collection.If you specify a collection as a binding source, WPF actually binds to the collection's default view. Pour plus d’informations sur les vues par défaut, consultez Vue d’ensemble de la liaison de données.For information about default views, see Data Binding Overview.

Si vous avez un scénario avancé et que vous souhaitez implémenter votre propre collection, envisagez d’utiliser l' IList interface.If you have an advanced scenario and you want to implement your own collection, consider using the IList interface. IListfournit une collection non générique d’objets accessibles individuellement par index, ce qui peut améliorer les performances.IList provides a non-generic collection of objects that can be individually accessed by index, which can improve performance.

Conditions d’autorisation dans la liaison de donnéesPermission Requirements in Data Binding

Lors de la liaison de données, vous devez considérer le niveau de confiance de l’application.When data binding, you must consider the trust level of the application. Le tableau suivant récapitule les types de propriété qui peuvent être liés dans une application qui s’exécute en mode confiance totale ou confiance partielle :The following table summarizes what property types can be bound to in an application that is executing in either full trust or partial trust:

Type de propriétéProperty type

(tous les modificateurs d’accès)(all access modifiers)
Propriété d’objet dynamiqueDynamic object property Propriété d’objet dynamiqueDynamic object property Propriété CLRCLR property Propriété CLRCLR property Propriété de dépendanceDependency property Propriété de dépendanceDependency property
Niveau de confianceTrust level Confiance totaleFull trust Confiance partiellePartial trust Confiance totaleFull trust Confiance partiellePartial trust Confiance totaleFull trust Confiance partiellePartial trust
Classe publiquePublic class OuiYes OUIYes OUIYes OUIYes OUIYes OuiYes
Classe non publiqueNon-public class OuiYes NonNo OuiYes NonNo OuiYes OuiYes

Ce tableau décrit les points importants suivants à propos des exigences relatives à l’autorisation dans la liaison de données :This table describes the following important points about permission requirements in data binding:

  • Pour les propriétés CLR, la liaison de données fonctionne tant que le moteur de liaison est en mesure d’accéder à la propriété de source de liaison à l’aide de la réflexion.For CLR properties, data binding works as long as the binding engine is able to access the binding source property using reflection. Sinon, le moteur de liaison émet un avertissement indiquant que la propriété ne peut pas être trouvée et utilise la valeur de secours ou la valeur par défaut, si elle est disponible.Otherwise, the binding engine issues a warning that the property cannot be found and uses the fallback value or the default value, if it is available.

  • Vous pouvez lier des propriétés sur les objets dynamiques qui sont définies au moment de la compilation ou de l’exécution.You can bind to properties on dynamic objects that are defined at compile time or run time.

  • Vous pouvez toujours lier aux propriétés de dépendance.You can always bind to dependency properties.

L’exigence d’autorisation pour la liaison XMLXML est similaire.The permission requirement for XMLXML binding is similar. Dans un bac à sable (sandbox XmlDataProvider ) de confiance partielle, échoue lorsqu’il ne dispose pas des autorisations nécessaires pour accéder aux données spécifiées.In a partial-trust sandbox, XmlDataProvider fails when it does not have permissions to access the specified data.

Les objets avec un type anonyme sont internes.Objects with an anonymous type are internal. Vous pouvez lier des propriétés de types anonymes uniquement lors de l’exécution en confiance totale.You can bind to properties of anonymous types only when running in full trust. Pour plus d’informations sur les types anonymes, consultez Types anonymes (Guide de programmation C#) ou Types anonymes (Visual Basic) (pour Visual Basic).For more information about anonymous types, see Anonymous Types (C# Programming Guide) or Anonymous Types (Visual Basic) (Visual Basic).

Pour plus d’informations sur la sécurité de confiance partielle, consultez Sécurité de confiance partielle de WPF.For more information about partial-trust security, see WPF Partial Trust Security.

Voir aussiSee also