Was sind die verschiedenen WPF-Bindungsmodi?

86

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?

DATT OZA
quelle

Antworten:

159
  • OneWay: Verwenden Sie diese Option, wenn die gebundene Eigenschaft die Benutzeroberfläche aktualisieren soll.
  • TwoWay: Dies hat das gleiche Verhalten wie OneWayund OneWayToSourcekombiniert. Die gebundene Eigenschaft aktualisiert die Benutzeroberfläche, und Änderungen an der Benutzeroberfläche aktualisieren die gebundene Eigenschaft (Sie würden dies beispielsweise mit einem TextBoxoder einem verwenden Checkbox.)
  • OneTime: Dies hat das gleiche Verhalten wie, OneWayauß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 BindingModeAufzählung zu MSDN .

Dave
quelle
Vielen Dank. es ist hilfreich ... Aber bitte geben Sie das TwoWay-Beispiel an ... ich möchte wissen, wie es den Code-Behind widerspiegelt.
DATT OZA
2
@DATT: Was meinst du mit "angeben"? Wenn Sie in der XAML Mode = TwoWay festlegen und den GUI-Wert ändern, wird die C # -Eigenschaft automatisch aktualisiert. Ihre Eigenschaft in CodeBehind muss jedoch in einer Klasse (wie einem ViewModel) implementiert werden, die die INotifyPropertyChanged-Schnittstelle implementiert. Wenn der CodeBehind den Wert der Eigenschaft über set ändert, müssen Sie PropertyChanged aufrufen, damit die GUI über die Wertänderung benachrichtigt wird und sich automatisch aktualisiert.
Dave
1
Wenn Sie nichts angeben, hängt das Verhalten von der von Ihnen verwendeten EIGENSCHAFT ab.
Mauro Sampietro
37

Eine Bindung besteht aus zwei Entitäten:

  1. Die Quelle (normalerweise das ViewModel in MVVM-Szenarien)
  2. Das Ziel (Das UI-Steuerelement)

Das Ziel muss a sein DependencyObject(für die Bindung an die Arbeit) und die Quelle kann entweder a sein DependencyObjectoder es sollte einen Mechanismus haben, um das WPF-Bindungssystem zu imitieren, wenn es geändert wird (Implemeting- INotifyPropetyChnagedSchnittstelle).


MVVM empfiehlt, dass das ViewModel-Projekt frei von View-bezogenen Referenzen ist. Daher wird empfohlen, die INotifyPropertyChangedSchnittstelle 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 TextPropertyder TextBoxKlasse ist DataBound an (sagen wir) UserNameEigenschaft 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.

  1. OneWay : Die Zieleigenschaft wird auf die Quelleigenschaft hören geändert wird und sich selbst aktualisieren. Wenn Sie die ViewwModel- UserNameEigenschaft programmgesteuert ändern , wird sie im Textfeld angezeigt . Dies ist mit Zwischenkosten verbunden, da das Bindungssystem nur Source auf Änderungen überwacht.
  2. TwoWay : Die Zieleigenschaft überwacht die zu ändernde Quelleigenschaft und aktualisiert sich selbst. UND Die Quelleigenschaft überwacht die zu ändernde Zieleigenschaft und aktualisiert sich selbst. Sowohl die TextPropertyals auch die UserNameEigenschaft bleiben synchron und aktualisieren sich gegenseitig, wenn sich eine ändert. Dies ist am kostspieligsten, da das Bindungssystem beide Seiten auf Änderungen überwachen muss.
  3. OneWayToSource : Die Source-Eigenschaft ändert sich, wenn die Zieleigenschaft geändert wird. Wenn der Benutzer das ändert TextProperty, nimmt die UserNameEigenschaft den geänderten Wert an. Dies ist wiederum mit Zwischenkosten verbunden, da das Bindungssystem nur Target auf Änderungen überwacht .
  4. OneTime : Dies geschieht nur einmal während der Lebensdauer der Bindung. Die Target- Eigenschaft wird mit der Source- Eigenschaft aktualisiert, wenn die Bindung erfolgt. Dies ist am wenigsten teuer und empfiehlt sich für Szenarien , in denen Sie statische Daten haben gezeigt , zum Beispiel werden Label, TextBlockusw.

Wenn Sie nichts erwähnen, ist jeder Zieleigenschaft ein Standardbindungsmodus zugeordnet. ZB hat der TextPropertyvon a TextBoxden Standardbindungsmodus als TwoWay. Für die TextPropertyvon a ist TextBlockes 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.

James
quelle