Vue d'ensemble des sources de liaison

Mise à jour : novembre 2007

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

Cette rubrique comprend les sections suivantes.

  • Source d'une liaison
  • Utilisation d'une classe CLR comme objet de source de liaison
  • Objets entiers utilisés comme source de liaison
  • Objets de collection utilisés comme source de liaison
  • Autorisations requises
  • Rubriques connexes

Source d'une 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 avec des propriétés publiques, des sous-propriétés, ainsi que des 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.

Consultez la section suivante pour plus d'informations sur l'implémentation d'une classe pouvant servir d'objet source.

Données ADO.NET

Vous pouvez créer une liaison avec des objets ADO.NET tels que DataTableDataView d'ADO.NET implémente IBindingList, en fournissant des notifications de modification que le moteur de liaison écoute.

Pour un exemple, consultez Liaison à un groupe de données ADO.NET, exemple.

Données XML

Vous pouvez créer une liaison avec des requêtes XPath et les exécuter sur XmlNode, XmlDocument ou XmlElement. Une manière commode d'accéder aux données XML qui constituent la source de liaison dans la balise est d'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 avec un XElement ou un XDocument, ou encore avec les résultats de requêtes exécutées sur des objets de ces types à l'aide de LINQ pour XML. Une manière commode d'accéder aux données XML qui constituent la source de liaison dans la balise 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.

DependencyObject

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

Utilisation d'une classe CLR comme objet de source de liaison

Cette section traite des aspects que vous devez connaître si vous implémentez une classe CLR pour servir d'objet source.

Implémentation de notifications de modification

Si vous utilisez une liaison OneWay ou TwoWay (vous souhaitez que votre interface utilisateur se mette à jour lorsque les propriétés sources changent dynamiquement), vous devez implémenter une propriété appropriée de mécanisme de notification de modification. Le mécanisme recommandé consiste pour la classe CLR à implémenter l'interface INotifyPropertyChanged. Pour plus d'informations, consultez Comment : implémenter la notification des modifications de propriétés.

Si vous n'implémentez 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 objet source implémente un mécanisme de notification adéquat, les mises à jour des cibles sont effectuées automatiquement. Si, pour quelque raison, votre objet source 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 comme propriétés sources 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 ou virtuelles ne possédant pas d'implémentation de base.

  • Vous ne pouvez pas créer de liaison avec les champs publics d'une classe CLR.

  • 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, pas de la propriété source. 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 d'une liaison. Cela peut être réalisé en spécifiant l'objet comme source de liaison à l'aide de la propriété Source ou DataContext, puis en ne fournissant aucun d'accès autre qu'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.

Objets de collection utilisés comme source de liaison

Souvent, l'objet que vous souhaitez utiliser comme source est une collection de plusieurs objets personnalisés, dont chacun représente un objet de donnée servant 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, que votre application parcourt pour déterminer combien d'ordres 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'interface utilisateur, 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.

WPF fournit la classe ObservableCollection<T> qui est 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 données, le WPF crée en fait une liaison avec 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 évolué et que vous souhaitez implémenter votre propre collection, pensez à utiliser IList, qui fournit une collection non générique d'objets accessibles individuellement par index et assure donc les meilleures performances.

Autorisations requises

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é 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

Classe publique

Oui

Oui

Oui

Oui

Classe privée

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é source à 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 toujours créer une liaison avec les propriétés de dépendance.

La spécification 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 concernées.

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

Voir aussi

Tâches

Comment : spécifier la source de liaison

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

Référence

ObjectDataProvider

XmlDataProvider

Autres ressources

Rubriques Comment relatives aux liaisons de données