22.6 Datenbindung
Mit WindowsForms können Sie eine Datenbindung nur relativ eingeschränkt realisieren. Die Datenbindung von WPF ist viel flexibler, denn alle Eigenschaften, genau genommen alle abhängigen Eigenschaften, sind datenbindungsfähig.
Die Datenquellen sind ausgesprochen vielfältig. Es kann sich um folgende handeln:
- die Eigenschaft einer anderen Komponente
- eine XML-Datei
- eine Collection
- Datenbanken
22.6.1 Einfache Datenbindung
Im einfachsten Fall einer Datenbindung können wir die Eigenschaften zweier Komponenten miteinander verbinden: Eine fungiert als Quelle und die andere als Empfänger (Konsument).
Im folgenden Beispiel hat ein Fenster zwei Textboxen (siehe Abbildung 22.5). Der Text der oberen Textbox soll auch in der unteren Textbox angezeigt werden – und das bei jedem Tastendruck.
'...\WPFKonzepte\Datenbindung\Einfach.xaml |
<Window ...> <StackPanel> <TextBox Name="oben" Height="50" FontSize="16"></TextBox> <TextBox Name="unten" Height="50" Background="AliceBlue" FontSize="16"> <Binding ElementName="oben" Path="Text" /> </TextBox> </StackPanel> </Window>
Abbildung 22.5 Beispiel zu einfacher Datenbindung
Für die Bindung sorgt der XAML-Code:
Binding ElementName="oben" Path="Text
Mit einem Binding-Objekt wird die Bindung beschrieben. Dessen Eigenschaft ElementName gibt den Namen der Datenquelle an, und Path bezeichnet die Eigenschaft der Datenquelle, an die gebunden werden soll. Im Beispiel bindet sich der Inhalt der unteren Textbox an den Text der oberen Textbox.
In einer anderen Schreibweise wird die Bindung in geschweiften Klammern angegeben. Sie wird auch als Binding Markup Extension bezeichnet. Diese Notation haben wir schon in einigen Beispielen benutzt.
<TextBox Name="unten" Height="50" Background="AliceBlue" FontSize="16" Text="{Binding ElementName=oben, Path=Text}">
Beachten Sie bei der Notation, dass die Name-Wert-Paare durch Kommata getrennt werden.
Voraussetzung der Datenbindung ist, dass die Zieleigenschaft eine abhängige Eigenschaft ist. Die Zieleigenschaft bestimmt auch den Datentyp der Datenbindung. Es muss eine implizite Konvertierung des Datentyps der Quelle in den Datentyp des Ziels geben.
Bindung mit Code
Bindungen im XAML-Code wirken sich sofort aus. Im Code können Sie bei Bedarf eine Bindung erst zur Laufzeit aktivieren. Dazu wird zuerst ein Binding-Objekt erzeugt, und wenn es gewünscht ist, geben Sie die Zieleigenschaft an. Der Eigenschaft ElementName weisen Sie den Namen der Quellkomponente als Zeichenfolge zu und rufen anschließend die Methode SetBindung der Zielkomponente auf. Der erste Parameter ist die abhängige Eigenschaft der Datenquelle, der zweite das gerade erzeugte Binding-Objekt. Die Eigenschaft ist als klassengebundene Eigenschaft der Quellklasse gespeichert.
'...\WPFKonzepte\Datenbindung\Code.xaml |
<Window ...> <StackPanel> <TextBox Name="oben" Height="50" FontSize="16"></TextBox> <TextBox Name="unten" Height="50" Background="AliceBlue" FontSize="16"> </TextBox> <Button Height="23" Name="taste" Width="150" HorizontalAlignment="Right" Click="Klick">Bindung erzeugen</Button> </StackPanel> </Window>
'...\WPFKonzepte\Datenbindung\Code.xaml.vb |
Private Sub Klick(sender As Object, e As RoutedEventArgs) Dim binding As New Binding("Text") binding.ElementName = "oben" unten.SetBinding(TextBox.TextProperty, binding) End Sub
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.