Partager via


Vue d'ensemble des sources de liaison

Dans la liaison de données, l'objet de source de liaison fait référence à l'objet dont vous obtenez vos données. Cette rubrique traite des types d'objets que vous pouvez utiliser comme source de liaison.

Cette rubrique comprend les sections suivantes.

  • Types de sources de liaison
  • Implémentation d'une classe pour la source de liaison
  • Objets entiers utilisés comme source de liaison
  • Utilisation d'objets de collection utilisés comme source de liaison
  • Besoins d'autorisation dans la liaison de données
  • Rubriques connexes

Types de sources de liaison

La liaison de données Windows Presentation Foundation (WPF) prend en charge les types suivants de sources de liaison :

Source de liaison

Description

Objets common language runtime (CLR)

Vous pouvez créer une liaison aux propriétés publiques, sous-propriétés, ainsi qu'aux indexeurs de n'importe quel objet common language runtime (CLR). Le moteur de liaison utilise la réflexion CLR pour obtenir les valeurs des propriétés. Des objets qui implémentent ICustomTypeDescriptor ou possèdent un TypeDescriptionProvider enregistré utilisent également le moteur de liaison.

Pour plus d'informations sur l'implémentation d'une classe qui peut servir de source de liaison, consultez Implémentation d'une classe pour la source de liaison plus loin dans cette rubrique.

objets dynamiques

Vous pouvez créer une liaison aux propriétés et aux indexeurs disponibles d'un objet qui implémente l'interface IDynamicMetaObjectProvider. Si vous pouvez accéder au membre dans le code, vous pouvez le lier. 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 au chemin d'accès de liaison la valeur AProperty.

Objets ADO.NET

Vous pouvez créer une liaison avec les objets ADO.NET, DataTable par exemple. ADO.NET DataView implémente l'interface IBindingList, qui fournit des notifications de modification que le moteur de liaison écoute.

Objets XML

Vous pouvez créer une liaison aux requêtes XPath et les exécuter sur XmlNode, XmlDocument ou XmlElement. Une manière pratique d'accéder aux données XML qui constituent la source de liaison dans le balisage consiste à utiliser un objet XmlDataProvider. Pour plus d'informations, consultez Comment : effectuer une liaison à des données XML à l'aide d'un XMLDataProvider et de requêtes XPath.

Vous pouvez également créer une liaison à un XElement ou un XDocument, ou encore aux résultats de requêtes exécutées sur des objets de ces types à l'aide de LINQ to XML. Une manière commode d'utiliser LINQ to XML pour accéder aux données XML qui constituent la source de liaison dans le balisage consiste à utiliser un objet ObjectDataProvider. Pour plus d'informations, consultez Comment : effectuer une liaison avec XDocument, XElement ou LINQ pour des résultats de requête XML.

Objets DependencyObject

Vous pouvez créer une liaison aux propriétés de dépendance de tout élément DependencyObject. Pour obtenir un exemple, consultez Comment : lier les propriétés de deux contrôles.

Implémentation d'une classe pour la source de liaison

Vous pouvez créer vos propres sources de liaison. Cette section traite des aspects que vous devez connaître si vous implémentez une classe pour servir de source de liaison.

Implémentation de notifications de modification

Si vous utilisez une liaison OneWay ou TwoWay (car vous souhaitez que votre UI soit mise à 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é. Le mécanisme recommandé consiste pour la classe dynamique CLR à implémenter l'interface INotifyPropertyChanged. Pour plus d'informations, consultez Comment : implémenter la notification des modifications de propriétés.

Si vous créez un objet CLR qui n'implémente pas INotifyPropertyChanged, vous devez alors faire en sorte que votre propre système de notification s'assure que les données utilisées dans une liaison demeurent à jour. Vous pouvez fournir des notifications de modification en prenant en charge le modèle PropertyChanged pour chaque propriété pour laquelle vous souhaitez disposer de notifications de modification. Pour prendre en charge ce modèle, vous définissez un événement modifié NomPropriété pour chaque propriété, NomPropriété étant le nom de la propriété. Vous déclenchez l'événement chaque fois que la propriété est modifiée.

Si votre source de liaison implémente l'un de ces mécanismes de notification, les mises à jour des cibles sont effectuées automatiquement. Si, pour quelque raison, votre source de liaison ne fournit pas de notifications de modification de propriété adéquates, vous pouvez utiliser la méthode UpdateTarget pour mettre à jour explicitement la propriété cible.

Autres caractéristiques

La liste suivante fournit d'autres points importants à noter :

  • Si vous souhaitez créer l'objet en XAML, la classe doit avoir un constructeur par défaut. Dans certains langages .NET, tels que C#, le constructeur par défaut peut être créé pour vous.

  • Les propriétés que vous utilisez en tant que sources de liaison pour une liaison doivent être des propriétés publiques de votre classe. Vous ne pouvez pas accéder à des propriétés d'interface définies explicitement à des fins de liaison, ni à des propriétés protégées, privées, internes ou virtuelles ne possédant pas d'implémentation de base.

  • Vous ne pouvez pas créer de liaison aux champs publics.

  • Le type de propriété déclaré dans votre classe est le type qui est passé à la liaison. Toutefois, le type utilisé par la liaison dépend du type de la propriété cible de liaison, et non pas de la propriété de la source de liaison. En cas de différence de type, vous pouvez écrire un convertisseur pour gérer la manière dont votre propriété personnalisée est passée initialement à la liaison. Pour plus d'informations, consultez IValueConverter.

Objets entiers utilisés comme source de liaison

Vous pouvez utiliser un objet entier comme source de liaison. Vous pouvez spécifier une source de liaison à l'aide de la propriété Source ou DataContext, puis fournir une déclaration de liaison vierge : {Binding}. Les scénarios dans lesquels cela est utile incluent les liaisons avec des objets de type chaîne, les liaisons avec des objets possédant plusieurs propriétés qui vous intéressent, ou les liaisons avec des objets de collection. Pour obtenir un exemple de création d'une liaison avec un objet de collection entier, consultez Comment : utiliser le modèle maître/détail avec des données hiérarchiques.

Notez que vous devrez peut-être appliquer une logique personnalisée afin que les données soient pertinentes pour votre propriété cible liée. La logique personnalisée peut être sous la forme d'un convertisseur personnalisé (si la conversion de type par défaut n'existe pas) ou un 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. Pour plus d'informations sur les modèles de données, consultez Vue d'ensemble des modèles de données.

Utilisation d'objets de collection utilisés comme source de liaison

Souvent, l'objet que vous souhaitez utiliser comme source de liaison est une collection d'objets personnalisés. Chaque objet sert de source pour une instance d'une liaison répétée. Par exemple, vous pouvez avoir une collection CustomerOrders, composée d'objets CustomerOrder, au sein de laquelle votre application itère pour déterminer le nombre d'ordres qui existent et les données que chacun contient.

Vous pouvez énumérer toute collection qui implémente l'interface IEnumerable. Toutefois, pour paramétrer des liaisons dynamiques afin que les insertions ou les suppressions dans la collection mettent automatiquement à jour l'UI, la collection doit implémenter l'interface INotifyCollectionChanged. Cette interface expose un événement qui doit être déclenché à chaque fois que la collection sous-jacente est modifiée.

La classe ObservableCollection<T> fournit une implémentation intégrée d'une collection de données exposant l'interface INotifyCollectionChanged. Les objets de données individuels dans la collection doivent satisfaire aux spécifications décrites dans les sections précédentes. Pour obtenir un exemple, consultez Comment : créer et effectuer une liaison à un ObservableCollection. Avant d'implémenter votre propre collection, pensez à utiliser ObservableCollection<T> ou l'une des classes de collection existantes, telles que List<T>, Collection<T> et BindingList<T>, entre autres.

Le WPF ne crée jamais directement une liaison avec une collection. Si vous spécifiez une collection comme source de liaison, WPF crée en fait une liaison à l'affichage par défaut de la collection. Pour plus d'informations sur les affichages par défaut, consultez Vue d'ensemble de la liaison de données.

Si vous avez un scénario avancé et que vous souhaitez implémenter votre propre collection, envisagez d'utiliser l'interface IList. IList fournit une collection non générique d'objets individuellement accessibles par index, qui peut améliorer la performance.

Besoins d'autorisation dans la liaison de données

Lors de la liaison de données, vous devez considérer le niveau de confiance de l'application. Le tableau suivant résume quels types de propriété peuvent être liés dans une application qui s'exécute en mode confiance totale ou confiance partielle :

Type de propriété

(tous les modificateurs d'accès)

Propriété de l'objet dynamique

Propriété de l'objet dynamique

Propriété CLR

Propriété CLR

Propriété de dépendance

Propriété de dépendance

Niveau de confiance

Confiance totale

Confiance partielle

Confiance totale

Confiance partielle

Confiance totale

Confiance partielle

Classe publique

Oui

Oui

Oui

Oui

Oui

Oui

Classe non publique

Oui

Non

Oui

Non

Oui

Oui

Ce tableau décrit les points importants suivants à propos des spécifications d'autorisation dans la liaison de données :

  • 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 la source de liaison à l'aide de la réflexion. Sinon, le moteur de liaison émet un avertissement stipulant que la propriété est introuvable et utilise la valeur de secours ou celle par défaut, si elle est disponible.

  • Vous pouvez créer une liaison aux propriétés sur des objets dynamiques définis au moment de la compilation ou de l'exécution.

  • Vous pouvez toujours créer une liaison avec les propriétés de dépendance.

Le besoin d'autorisation pour la liaison XML est similaire : dans un bac à sable (sandbox) de confiance partielle, XmlDataProvider échoue lorsqu'il ne possède pas d'autorisations pour accéder aux données spécifiées.

Les objets avec un type anonyme sont internes. Vous pouvez créer uniquement une liaison aux propriétés de types anonymes lors du fonctionnement avec une confiance totale. Pour plus d'informations sur les types anonymes, consultez Types anonymes (Guide de programmation C#) ou Types anonymes (Visual Basic) (Visual Basic).

Pour plus d'informations sur le niveau de sécurité de confiance partielle, consultez Sécurité de confiance partielle de WPF.

Voir aussi

Tâches

Comment : spécifier la source de liaison

Référence

ObjectDataProvider

XmlDataProvider

Concepts

Vue d'ensemble de la liaison de données

Vue d'ensemble de la liaison de données WPF avec LINQ to XML

Optimisation des performances : liaison de données

Autres ressources

Rubriques "Comment" relatives aux liaisons de données