106 votes

Quels sont les différents modes de liaison WPF?

Je ne comprends pas les différents modes de liaison de données dans WPF, tels que :

  • One-Way
  • Two-Way
  • One-Time
  • etc...

Que signifie chacun de ces modes ?

Quand doivent-ils être utilisés ?

194voto

Dave Points 5649
  • OneWay: Utilisez ceci lorsque vous souhaitez que la propriété liée mette à jour l'interface utilisateur.
  • TwoWay: Cela a le même comportement que OneWay et OneWayToSource combinés. La propriété liée mettra à jour l'interface utilisateur, et les changements dans l'interface utilisateur mettront à jour la propriété liée (vous utiliseriez ceci avec un TextBox ou une Checkbox, par exemple.)
  • OneTime: Cela a le même comportement que OneWay, sauf qu'il mettra à jour l'interface utilisateur une seule fois. Ceci devrait être votre choix par défaut pour la liaison (pour diverses raisons sur lesquelles je ne m'étendrai pas ici). Vous ne devriez utiliser d'autres types de liaisons que si vous avez réellement besoin de fonctionnalités supplémentaires.
  • OneWayToSource: C'est l'opposé de OneWay -- les changements de valeur de l'interface utilisateur mettent à jour la propriété liée.

Si vous ne spécifiez rien, alors le comportement dépendra du contrôle que vous utilisez.

Pour plus d'informations, consultez l'énumération BindingMode sur Microsoft Docs.

49voto

James Points 568

Une liaison se compose de deux entités :

  1. La source (généralement le ViewModel dans les scénarios MVVM)
  2. La cible (le contrôle UI)

La cible doit être un DependencyObject (pour que la liaison fonctionne) et la source peut être soit un DependencyObject soit elle doit avoir un mécanisme pour imiter le système de liaison WPF concernant les changements (en implémentant l'interface INotifyPropertyChanged).


Le MVVM recommande que le projet ViewModel soit exempt de références liées à la Vue et il est donc recommandé d'utiliser l'interface INotifyPropertyChanged pour que l'objet Source soit pris en compte par la liaison WPF. La liaison se fait entre une propriété de Source et une propriété de Cible (qui doit être une DependencyProperty). Par exemple, la propriété TextProperty de la classe TextBox est liée de manière bidirectionnelle (DataBound) à la propriété UserName du ViewModel. La liaison WPF offre quatre types de liaisons. N'oubliez pas, la liaison s'exécute sur le thread de l'interface utilisateur à moins que vous ne le spécifiiez autrement.

  1. OneWay : La propriété cible écoutera les changements de la propriété source et se mettra à jour. Si vous changez de manière programmatique la propriété UserName du ViewModel, cela se reflétera dans la zone de texte. C'est d'un coût intermédiaire car le système de liaison ne regarde que la propriété Source pour les changements.
  2. TwoWay : La propriété cible écoutera les changements de la propriété source et se mettra à jour. ET la propriété source écoutera les changements de la propriété cible et se mettra à jour. Tant la propriété TextProperty que la propriété UserName resteront synchronisées et se mettront à jour mutuellement en cas de modification de l'une ou l'autre. C'est le plus coûteux car le système de liaison doit surveiller les deux côtés pour les changements.
  3. OneWayToSource : La propriété Source changera si la propriété cible est modifiée. Si l'utilisateur modifie la propriété TextProperty, la propriété UserName prendra la valeur modifiée. Encore une fois, c'est d'un coût intermédiaire car le système de liaison ne regarde que la Cible pour les changements.
  4. OneTime : Cela se produit une seule fois pendant la durée de la liaison, la propriété Cible sera mise à jour avec la propriété Source lorsque la liaison se produit. C'est le moins coûteux et est recommandé pour les scénarios où vous avez des données statiques à afficher, par exemple dans un Label, un TextBlock, etc.

Si vous ne mentionnez rien, chaque propriété cible a un mode de liaison par défaut associé. Par exemple, la propriété TextProperty d'une TextBox a le mode de liaison par défaut comme étant TwoWay. Pour la propriété TextProperty d'un TextBlock, il s'agit d'une liaison unidirectionnelle.

Il est conseillé de choisir le bon mode car cela peut vous aider à réduire la latence de l'application, en particulier dans les cas où vous avez un grand nombre de contrôles dans votre interface utilisateur.

Pour en savoir plus sur le MVVM, voici un article écrit par moi: ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X