Ich verstehe die verschiedenen Datenbindungsmodi in WPF nicht, wie zum Beispiel:
- Einweg
- Zweiwege
- Einmal
- etc...
Was bedeutet jeder dieser Modi?
Wann sollten sie verwendet werden?
Antworten:
OneWay
: Verwenden Sie diese Option, wenn die gebundene Eigenschaft die Benutzeroberfläche aktualisieren soll.TwoWay
: Dies hat das gleiche Verhalten wie OneWay
und OneWayToSource
kombiniert. Die gebundene Eigenschaft aktualisiert die Benutzeroberfläche, und Änderungen an der Benutzeroberfläche aktualisieren die gebundene Eigenschaft (Sie würden dies beispielsweise mit einem TextBox
oder einem verwenden Checkbox
.)OneTime
: Dies hat das gleiche Verhalten wie, OneWay
außer dass die Benutzeroberfläche nur einmal aktualisiert wird. Dies sollte Ihre Standardauswahl für die Bindung sein (aus verschiedenen Gründen, auf die ich hier nicht näher eingehen werde). Sie sollten andere Arten von Bindungen nur verwenden, wenn Sie tatsächlich die zusätzliche Funktionalität benötigen.OneWayToSource
: Dies ist das Gegenteil von OneWay
- Änderungen der Benutzeroberflächenwerte aktualisieren die gebundene Eigenschaft.Wenn Sie nichts angeben, hängt das Verhalten von dem verwendeten Steuerelement ab.
Weitere Informationen finden Sie unter BindingMode
Aufzählung zu MSDN .
Eine Bindung besteht aus zwei Entitäten:
Das Ziel muss a sein DependencyObject
(für die Bindung an die Arbeit) und die Quelle kann entweder a sein DependencyObject
oder es sollte einen Mechanismus haben, um das WPF-Bindungssystem zu imitieren, wenn es geändert wird (Implemeting- INotifyPropetyChnaged
Schnittstelle).
MVVM empfiehlt, dass das ViewModel-Projekt frei von View-bezogenen Referenzen ist. Daher wird empfohlen, die INotifyPropertyChanged
Schnittstelle zu verwenden, damit das Quellobjekt von der WPF-Bindung gehört wird. Die Bindung erfolgt zwischen einer Eigenschaft von Source und einer Eigenschaft von Target (muss a sein DependencyProperty
). Beispiel: Die TextProperty
der TextBox
Klasse ist DataBound an (sagen wir) UserName
Eigenschaft des Ansichtsmodells. Die WPF-Bindung bietet vier Arten der Bindung. Denken Sie daran, dass die Bindung auf einem UI-Thread ausgeführt wird, sofern Sie nichts anderes angeben.
UserName
Eigenschaft programmgesteuert ändern , wird sie im Textfeld angezeigt . Dies ist mit Zwischenkosten verbunden, da das Bindungssystem nur Source auf Änderungen überwacht.TextProperty
als auch die UserName
Eigenschaft bleiben synchron und aktualisieren sich gegenseitig, wenn sich eine ändert. Dies ist am kostspieligsten, da das Bindungssystem beide Seiten auf Änderungen überwachen muss.TextProperty
, nimmt die UserName
Eigenschaft den geänderten Wert an. Dies ist wiederum mit Zwischenkosten verbunden, da das Bindungssystem nur Target auf Änderungen überwacht .Label
, TextBlock
usw.Wenn Sie nichts erwähnen, ist jeder Zieleigenschaft ein Standardbindungsmodus zugeordnet. ZB hat der TextProperty
von a TextBox
den Standardbindungsmodus als TwoWay
. Für die TextProperty
von a ist TextBlock
es eine Möglichkeit.
Es ist ratsam, den richtigen Modus zu wählen, da dies Ihnen helfen kann, die Anwendungslatenz zu verringern, insbesondere in Fällen, in denen Ihre Benutzeroberfläche eine große Anzahl von Steuerelementen enthält.
Für mehr über MVVM hier ist ein Artikel von mir geschrieben.