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 ?
Je ne comprends pas les différents modes de liaison de données dans WPF, tels que :
Que signifie chacun de ces modes ?
Quand doivent-ils être utilisés ?
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.
Une liaison se compose de deux entités :
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.
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.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.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.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 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.