Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans la liaison de données, l’objet source de liaison fait référence à l’objet à partir duquel vous obtenez des données. Cet article décrit les types d’objets que vous pouvez utiliser comme source de liaison, comme les objets CLR .NET, XML et les objets DependencyObject.
Types de sources de liaison
La liaison de données WPF (Windows Presentation Foundation) prend en charge les types de sources de liaison suivants :
Objets .NET CLR (Common Language Runtime)
Vous pouvez lier des propriétés publiques, des sous-propriétés et 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. Les objets qui implémentent ICustomTypeDescriptor ou ont un enregistrement TypeDescriptionProvider fonctionnent également avec 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 source de liaison sur vos objets plus loin dans cet article.
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 le lier. Par exemple, si un objet dynamique vous permet d’accéder à un membre dans le code via
SomeObject.AProperty, vous pouvez le lier en définissant le chemin de liaison surAProperty.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 des requêtes et les exécuter sur un
XPath, XmlNode, ou XmlDocument. 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 Lier aux données XML à l’aide d’un xmlDataProvider et de requêtes XPath (.NET Framework).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 Bind to XDocument, XElement ou LINQ for XML Query Results (.NET Framework).
DependencyObject Objets
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 (.NET Framework).
Implémenter une source de liaison sur vos objets
Vos objets CLR peuvent devenir des sources de liaison. Il existe quelques éléments à prendre en compte lors de l’implémentation d’une classe pour servir de source de liaison.
Fournir des notifications de modification
Si vous utilisez l'une ou l'autre liaison OneWay ou TwoWay, implémentez un mécanisme de notification « propriété modifiée » approprié. Le mécanisme recommandé est destiné à la classe CLR ou dynamique pour implémenter l’interface INotifyPropertyChanged . Pour plus d’informations, consultez How to : Implement Property Change Notification (.NET Framework).
Il existe deux façons d’informer un abonné d’une modification de propriété :
Implémentez l’interface INotifyPropertyChanged .
Il s’agit du mécanisme recommandé pour les notifications. Le INotifyPropertyChanged fournit l’événement PropertyChanged, que le système de liaison respecte. En générant cet événement et en fournissant le nom de la propriété qui a changé, vous informerez une cible de liaison de la modification.
Implémentez le
PropertyChangedmodèle.Chaque propriété qui doit notifier une cible de liaison qu’elle a modifiée a un événement correspondant
PropertyNameChanged, oùPropertyNameest le nom de la propriété. Vous déclenchez l’événement chaque fois que la propriété change.
Si votre source de liaison implémente l’un de ces mécanismes de notification, les mises à jour cibles se produisent automatiquement. Si, pour une raison quelconque, votre source de liaison ne fournit pas les notifications de modification de propriété appropriées, vous pouvez 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 :
Les objets de données qui servent de sources de liaison peuvent être déclarés en XAML en tant que ressources, à condition qu’ils aient un constructeur sans paramètre. Sinon, vous devez créer l’objet de données dans le code et l’affecter directement au contexte de données de votre arborescence d’objets XAML ou l’utiliser comme source de liaison.
Les propriétés que vous utilisez comme propriétés sources de liaison doivent être des propriétés publiques de votre classe. Les propriétés d'interface explicitement définies ne peuvent pas être accessibles à des fins de liaison, de même que les propriétés protégées, privées, internes ou virtuelles qui n'ont pas d'implémentation de base.
Vous ne pouvez pas établir de liaison à 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 dépend du type de la propriété cible de liaison, et non de la propriété source de liaison. S'il existe une différence de type, vous pouvez peut-être écrire un convertisseur pour gérer comment votre propriété personnalisée est initialement passée à la liaison. Pour plus d’informations, consultez IValueConverter.
Objets entiers en tant que source de liaison
Vous pouvez utiliser un objet entier comme source de liaison. Spécifiez une source de liaison à l’aide de la Source ou de la DataContext propriété, puis fournissez une déclaration de liaison vide : {Binding}. Les scénarios dans lesquels cela est utile incluent la liaison à des objets de type chaîne, la liaison à des objets avec plusieurs propriétés qui vous intéressent ou la liaison à des objets de collection. Pour obtenir un exemple de liaison à un objet de collection entier, consultez How to Use the Master-Detail Pattern with Hierarchical Data (.NET Framework).
Vous devrez peut-être appliquer une logique personnalisée afin que les données soient significatives pour votre propriété cible liée. La logique personnalisée peut être sous la forme d’un convertisseur personnalisé ou d’un DataTemplate. Pour plus d’informations sur les convertisseurs, consultez Conversion de données. Pour plus d’informations sur les modèles de données, consultez Vue d’ensemble de la création de modèles de données (.NET Framework).
Objets de collection en tant que 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 pourriez avoir une CustomerOrders collection composée de CustomerOrder objets, où votre application effectue une itération sur la collection pour déterminer combien de commandes existent et quelles données sont contenues dans chacune.
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 change.
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 de la collection doivent répondre aux exigences décrites dans les sections précédentes. Pour obtenir un exemple, consultez How to Create and Bind to an ObservableCollection (.NET Framework). 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.
Lorsque vous spécifiez une collection en tant que source de liaison, WPF ne lie pas directement à la collection. Au lieu de cela, WPF se lie réellement à la vue par défaut de la collection. Pour plus d’informations sur les vues par défaut, consultez Utilisation d’une vue par défaut.
Si vous avez un scénario avancé et que vous souhaitez implémenter votre propre collection, envisagez d’utiliser l’interface IList . Cette interface fournit une collection non générique d’objets qui peuvent être accessibles individuellement par index, ce qui peut améliorer les performances.
Exigences d’autorisation dans la liaison de données
Contrairement à .NET Framework, .NET s’exécute avec une sécurité de confiance totale. Toutes les liaisons de données s’exécutent avec le même accès que l’utilisateur exécutant l’application.
Voir aussi
.NET Desktop feedback