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