Partager via


Qu’est-ce que les sources de liaison ?

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 :

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