Share 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 à partir duquel vous obtenez des données. Cette rubrique décrit les types d’objets que vous pouvez utiliser comme source de liaison.

Types de source de liaison

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

Source de liaison Description
Objets CLR (Common Language Runtime) Vous pouvez établir une liaison à des propriétés publiques, sous-propriétés, ainsi qu’à des indexeurs, de n’importe quel objet CLR (Common Language Runtime). Le moteur de liaison utilise la réflexion CLR pour obtenir les valeurs des propriétés. Vous pouvez également utiliser les objets qui implémentent ICustomTypeDescriptor ou ont un enregistrement TypeDescriptionProvider avec le moteur de liaison.

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.
objets dynamiques Vous pouvez établir une liaison aux propriétés et indexeurs disponibles d’un objet qui implémente l’interface IDynamicMetaObjectProvider . Si vous pouvez accéder au membre dans le code, vous pouvez lier celui-ci. Par exemple, si un objet dynamique vous permet d’accéder à un membre dans le code via someObject.AProperty, vous pouvez le lier en affectant le chemin de liaison AProperty.
objets ADO.NET Vous pouvez lier des objets ADO.NET, tels que DataTable. Le ADO.NET DataView implémente l’interface IBindingList , qui fournit des notifications de modification que le moteur de liaison écoute.
Objets XML Vous pouvez lier et exécuter XPath des requêtes sur un XmlNode, XmlDocumentou XmlElement. Un moyen pratique d’accéder aux données XML qui est la source de liaison dans le balisage consiste à utiliser un XmlDataProvider objet. Pour plus d’informations, consultez Effectuer une liaison à des données XML à l'aide d'un XMLDataProvider et de requêtes XPath.

Vous pouvez également établir une liaison à un XElement ou XDocument, ou lier aux résultats des requêtes exécutées sur des objets de ces types à l’aide de 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 consiste à utiliser un ObjectDataProvider objet. Pour plus d’informations, consultez Effectuer une liaison avec XDocument, XElement ou LINQ pour des résultats de requête XML.
Objets DependencyObject Vous pouvez lier des propriétés de dépendance de n’importe quel DependencyObject. Pour obtenir un exemple, consultez 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 décrit les éléments que vous devez connaître si vous implémentez une classe pour servir de source de liaison.

Fournir des notifications de modification

Si vous utilisez l’une OneWay ou TwoWay l’autre des liaisons (car vous souhaitez que votre interface utilisateur soit mise à jour lorsque les propriétés de la source de liaison changent dynamiquement), vous devez implémenter un mécanisme de notification modifié de propriété approprié. Le mécanisme recommandé est destiné à la classe CLR ou dynamique pour implémenter l’interface INotifyPropertyChanged . Pour plus d’informations, consultez Implémenter la notification des modifications de propriétés.

Si vous créez un objet CLR qui n’implémente INotifyPropertyChangedpas, vous devez organiser votre propre système de notification pour vous assurer que les données utilisées dans une liaison restent actuelles. 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. 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é. Vous déclenchez l’événement chaque fois que la propriété est modifiée.

Si votre source de liaison implémente un de ces mécanismes de notification, les mises à jour de la cible sont effectuées automatiquement. Si, pour une raison quelconque, votre source de liaison ne fournit pas les notifications de modification de propriété appropriées, vous avez la possibilité d’utiliser la UpdateTarget méthode pour mettre à jour la propriété cible explicitement.

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 sans paramètre. Dans certains langages .NET, tels que C#, le constructeur sans paramètre peut être créé pour vous.

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

  • Vous ne pouvez pas lier des champs publics.

  • Le type de la propriété déclarée dans votre classe est le type qui est passé à la liaison. 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. 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. Pour plus d’informations, consultez IValueConverter.

Utilisation d’objets entiers 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 ou de la SourceDataContext propriété, puis fournir une déclaration de liaison vide : {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. 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.

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

Vous pouvez énumérer n’importe quelle collection qui implémente l’interface IEnumerable. Toutefois, pour configurer des liaisons dynamiques afin que les insertions ou les suppressions dans la collection mettent à jour l’IU automatiquement, 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 ObservableCollection<T> classe est une implémentation intégrée d’une collection de données qui expose l’interface INotifyCollectionChanged . Les objets de données individuels dans la collection doivent satisfaire les spécifications décrites dans les sections précédentes. Pour obtenir un exemple, consultez Créer et effectuer une liaison à un ObservableCollection. Avant d’implémenter votre propre collection, envisagez d’utiliser ObservableCollection<T> ou l’une des classes de collection existantes, telles que List<T>, Collection<T>et BindingList<T>, entre autres.

WPF ne lie jamais directement à la collection. Si vous spécifiez une collection comme source de liaison, WPF lie plutôt à la vue par défaut de la collection. Pour plus d’informations sur les vues 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 qui peuvent être accessibles individuellement par index, ce qui peut améliorer les performances.

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

Type de propriété

(tous les modificateurs d’accès)
Propriété d’objet dynamique Propriété d’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 exigences relatives à l’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 de liaison à l’aide de la réflexion. 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.

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

  • Vous pouvez toujours lier aux propriétés de dépendance.

L’exigence d’autorisation pour la liaison XML est similaire. Dans un bac à sable de confiance partielle, XmlDataProvider échoue lorsqu’il n’a pas les autorisations nécessaires pour accéder aux données spécifiées.

Les objets avec un type anonyme sont internes. Vous pouvez lier des propriétés de types anonymes uniquement lors de l’exécution en confiance totale. Pour plus d’informations sur les types anonymes, consultez Types anonymes (Guide de programmation C#) ou Types anonymes (Visual Basic) (pour Visual Basic).

Pour plus d’informations sur la sécurité de confiance partielle, consultez Sécurité de confiance partielle de WPF.

Voir aussi