web-dev-qa-db-fra.com

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:

  • Sens Unique
  • Bidirectionnel
  • Une fois
  • etc...

Que signifie chacun de ces modes?

Quand devraient-ils être utilisés?

70
DATT OZA
  • OneWay: utilisez-le 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 modifications apportées à l'interface utilisateur mettront à jour la propriété liée (vous utiliserez cela avec un TextBox ou un Checkbox par exemple.)
  • OneTime: Cela a le même comportement que OneWay sauf qu'il ne mettra à jour l'interface utilisateur qu'une seule fois. Cela devrait être votre choix par défaut pour la liaison (pour diverses raisons que je ne développerai pas ici), vous ne devez utiliser d'autres types de liaisons que si vous avez réellement besoin de la fonctionnalité supplémentaire.
  • 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, le comportement dépendra du contrôle que vous utilisez.

Pour plus d'informations, voir BindingMode enum sur MSDN .

131
Dave

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 de l'interface utilisateur)

La cible doit être un DependencyObject (pour que la liaison fonctionne) et la source peut être un DependencyObject ou elle doit avoir un mécanisme pour imiter le système de liaison WPF à propos de sa modification (implémentation INotifyPropetyChnaged interface).


MVVM recommande que le projet ViewModel soit exempt de toute référence liée à View et il est donc recommandé d'utiliser l'interface INotifyPropertyChanged pour que l'objet source soit entendu par la liaison WPF. La liaison se produit entre une propriété de Source et une propriété de Target (has être un DependencyProperty). par exemple. La TextProperty de la classe TextBox est DataBound à (disons) UserName la propriété du modèle de vue. La liaison WPF propose quatre types de liaison. N'oubliez pas que la liaison s'exécute sur le thread d'interface utilisateur, sauf indication contraire pour qu'elle s'exécute autrement.

  1. OneWay : La propriété cible écoutera la propriété source en cours de modification et se mettra à jour. Si vous modifiez par programme la propriété UserName de ViewwModel, elle se reflétera dans la zone de texte. Ceci est de coût intermédiaire car le système de reliure surveille uniquement la source des modifications.
  2. TwoWay : La propriété cible écoutera la propriété source en cours de modification et se mettra à jour. ET La propriété source écoutera la propriété cible en cours de modification et se mettra à jour. Les propriétés TextProperty et UserName resteront synchronisées et se mettront à jour si l'une change. Ceci est plus coûteux car le système de reliure doit surveiller les deux côtés pour le changement.
  3. OneWayToSource : la propriété Source changera si la propriété cible est modifiée. Si l'utilisateur modifie la TextProperty, la propriété UserName prendra la valeur modifiée. Il s'agit là encore d'un coût intermédiaire car le système de reliure surveille uniquement la cible des modifications.
  4. OneTime : cela ne se produit qu'une seule fois pendant la durée de vie de Binding, la cible sera mise à jour avec la propriété Source lorsque la liaison se produit. Ceci est moins coûteux et est conseillé pour les scénarios où vous avez des données statiques à afficher, par exemple Label, TextBlock etc.

Si vous ne mentionnez rien, chaque propriété cible a un mode de liaison par défaut qui lui est associé. Par exemple. le TextProperty d'un TextBox a le mode de liaison par défaut comme TwoWay. Pour le TextProperty d'un TextBlock c'est une façon.

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

Pour en savoir plus sur MVVM ici est un article écrit par moi.

30
James