Vue d’ensemble des 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 :

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

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

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