Qu’est-ce que les sources de liaison ? (WPF .NET)
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. Cet article décrit les types d’objets que vous pouvez utiliser comme source de liaison, comme les objets CLR .NET, XML et DependencyObject les objets.
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 CLR (Common Language Runtime) .NET
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 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 liaisonAProperty
.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 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 TwoWay l’autre OneWay liaison, implémentez un mécanisme de notification « propriété modifié » 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. Fournit INotifyPropertyChanged 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
PropertyChanged
modèle.Chaque propriété qui doit notifier une cible de liaison qu’elle a modifiée a un événement correspondant
PropertyNameChanged
, 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 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 en tant que source de liaison 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 sont pas accessibles à des fins de liaison, ni ne peuvent pas être protégées, privées, internes ou virtuelles qui n’ont aucune 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 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 pouvez écrire un convertisseur pour gérer la façon dont 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 aux données. 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 pouvez avoir une collection composée d’objets, où votre application effectue une CustomerOrders
itération sur la collection pour déterminer le nombre de CustomerOrder
commandes et les données contenues dans chaque ordre.
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 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