21 Datenbindung

In WinForms konnten Sie recht einfach eine Datenbindung realisieren. Sie waren dabei aber auf bestimmte Controls beschränkt, die über entsprechende Eigenschaften verfügen. Die Datenbindung von WPF bietet viel flexiblere Möglichkeiten, denn alle Eigenschaften – genau genommen alle abhängigen Eigenschaften – sind datenbindungsfähig.

Die Datenquellen sind ausgesprochen vielfältig:

  • Es kann sich bei der Datenquelle um die Eigenschaft einer anderen Komponente handeln.
  • Die Daten können aus einer XML-Datei bezogen werden.
  • Daten können einer Collection entnommen werden.
  • Dass Datenbanken ebenfalls Datenquellen darstellen, versteht sich fast wie von selbst.

Eine andere Voraussetzung muss aber erfüllt sein: Die Datenbindung funktioniert nur zusammen mit Dependency Propertys. Eine Datenquelle kann also nur an eine Dependency Property gebunden werden. Erfreulicherweise können die meisten Eigenschaften diese Bedingung erfüllen.


Galileo Computing - Zum Seitenanfang

21.1 Wichtige Klassen Zur nächsten ÜberschriftZur vorigen Überschrift

Bei der WPF-Datenbindung spielen zwei Klassen eine besondere Rolle:

  • Binding
  • DataContext

Ehe wir uns mit den ersten Beispielen beschäftigen, möchte ich Ihnen diese Klassen kurz vorstellen.


Galileo Computing - Zum Seitenanfang

21.1.1 Die Klasse »Binding« Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Binding-Objekt beschreibt die Bindung zwischen einer Datenquelle und einer bindenden Komponente. Meistens wird die Bindung im XAML-Code beschrieben, aber selbstverständlich kann die Bindung auch im C#-Code erfolgen. Die wichtigsten Eigenschaften des Binding-Objekts können Sie Tabelle 21.1 entnehmen. Viele der aufgeführten Eigenschaften werden Sie im Verlauf des Kapitels noch innerhalb der Beispielprogramme wiederfinden.


Tabelle 21.1 Die Eigenschaften eines »Binding«-Objekts

Eigenschaft Beschreibung
Converter

Diese Eigenschaft gibt an, welches Objekt als Konverter zwischen zwei Datentypen dienen soll.

ElementName

Diese Eigenschaft gibt den Bezeichner des Elements an, das als Datenquelle dient.

Mode

Legt den Bindungsmodus fest. Damit lässt sich die Verhaltensweise einer eventuellen gegenseitigen Aktualisierung zwischen Datenquelle und Datenziel steuern.

NotifyOnSourceUpdate /
NotifyOnTargetUpdate

Mit diesen Eigenschaften werden Ereignisse ermöglicht, die beim Aktualisieren der Datenquelle oder des Datenziels auftreten.

Path

Mit Path wird die Eigenschaft festgelegt, an die Daten gebunden werden sollen.

RelativeSource

Diese Eigenschaft legt die Datenquelle fest, allerdings relativ zum Datenziel.

UpdateSourceTrigger

Mit dieser Eigenschaft wird angegeben, wann die Datenquelle aktualisiert werden soll.



Galileo Computing - Zum Seitenanfang

21.1.2 Die Klasse »DataContext« topZur vorigen Überschrift

Die Klasse DataContext kann man sich als Bindeglied zwischen der eigentlichen Datenquelle und den bindenden Steuerelementen vorstellen. DataContext stellt die Daten bereit; das Steuerelement weiß aber noch nicht, welche es anzeigen soll.

Jedes von FrameworkElement abgeleitete Steuerelement verfügt über die Eigenschaft DataContext. Darüber wird die Datenquelle festgelegt, die bei Verwendung des Binding-Objekts verwendet werden soll. Sie können mit


textBox1.DataContext = datenquelle;

dem Steuerelement zwar seinen Datenkontext mitteilen, aber flexibel ist diese Lösung nicht. Besser, Sie weisen die Datenquelle an DataContext des übergeordneten Containers oder der Form zu. Davon profitieren alle enthaltenen Elemente, die dann ebenfalls das in DataContext angegebene Objekt als Quelle nutzen. Eine geschickte Zuweisung kann also von vielen Steuerelementen genutzt werden.

Um alle Steuerelemente eines Window am gleichen DataContext teilhaben zu lassen, weisen Sie die Daten dem DataContext des Window zu. Am geeignetsten ist dafür der Konstruktor:


public MainWindow() {
  this.dataContext = datenquelle;
}