Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 22 Elementbindungen
Pfeil 22.1 Einführung in die Bindungstechnik
Pfeil 22.1.1 Ein einfaches Bindungsbeispiel
Pfeil 22.2 Die Klasse »Binding«
Pfeil 22.2.1 Die Bindungsrichtung festlegen
Pfeil 22.2.2 Aktualisierung der Bindung
Pfeil 22.2.3 Die Ereignisse »SourceUpdated« und »TargetUpdated«
Pfeil 22.2.4 Beenden einer Bindung
Pfeil 22.3 Bindungsalternativen
Pfeil 22.3.1 Die Eigenschaft »Source«
Pfeil 22.3.2 Anbindung an relative Datenquellen
Pfeil 22.3.3 Die Bindung an »DataContext«

Galileo Computing - Zum Seitenanfang

22.3 BindungsalternativenZur nächsten Überschrift

Bisher haben wir die Datenbindung nur zwischen zwei Elementen mit der Eigenschaft ElementName kennengelernt. Möchten Sie eine Datenbindung mit einem nichtvisuellen Objekt, müssen Sie anstelle von ElementName eine der drei folgenden Eigenschaften einsetzen:

  • Source
  • RelativeSource
  • DataContext

Galileo Computing - Zum Seitenanfang

22.3.1 Die Eigenschaft »Source«Zur nächsten ÜberschriftZur vorigen Überschrift

Die Eigenschaft Source ist die allgemeinste von allen. Sie können damit praktisch jedes CLR-Objekt zur Datenquelle erklären. Nehmen wir an, Sie hätten eine Klasse Person implementiert und würden im XAML-Code in einem Ressourcenabschnitt ein Objekt davon erstellen. Die Bindung des Objekts an eine TextBox würde mit der Eigenschaft Source erfolgen, z. B.:

<Window.Resources>
<local:Person x:Key="pers" Name="Hans im Glück" />
</Window.Resources>
<Grid>
<TextBox Text="{Binding Source={StaticResource pers}, Path=Name}" />
</Grid>

Listing 22.9 Bindung an ein CLR-Objekt

Auch ohne dass wir uns bisher über die Möglichkeiten des Resources-Abschnitts unterhalten haben, dürfte das Listing verständlich sein. In Kapitel 23 werden wir die Möglichkeiten dieses Abschnitts noch genauer untersuchen.


Galileo Computing - Zum Seitenanfang

22.3.2 Anbindung an relative DatenquellenZur nächsten ÜberschriftZur vorigen Überschrift

Bindungen müssen sich nicht zwangsläufig auf ein anderes Steuerelement beziehen. Eine Bindung kann mit RelativeSource auch auf relative Quellen verweisen.

Der folgende XAML-Code beschreibt einen Slider, der vom Minimalwert 0 bis zum Maximalwert 10 seinen jeweils aktuellen Wert in einem ToolTip-Element anzeigt.

<Slider ToolTip="{Binding RelativeSource={RelativeSource Self}, 
Path=Value}"></Slider>

Listing 22.10 »RelativeSource« mit Verweis auf sich selbst

Dieser Relativverweis kann auch ohne Markup Extension definiert werden:

<Slider>
<Slider.ToolTip>
<Binding Path="Value">
<Binding.RelativeSource>
<RelativeSource Mode="Self"></RelativeSource>
</Binding.RelativeSource>
</Binding>
</Slider.ToolTip>
</Slider>

Listing 22.11 Relativer Verweis ohne Markup Extension

Neben dem Self-Modus gibt es noch drei weitere Modi zur Angabe relativer Bezüge.

Tabelle 22.5 Die Modi von »RelativeSource«

Modus Beschreibung

Self

Verweis auf sich selbst.

TemplatedParent

Dieser Modus ist nur innerhalb eines Templates sinnvoll und verweist auf sich selbst in einem Template (Self würde ControlTemplate liefern und nicht das Element selbst).

PreviousData

In einer Auflistung kann über diesen Modus der vorherige Datensatz abgerufen werden.

FindAncestor

Relative Navigation durch den Elementbaum, mit Hilfe des gewünschten Typs und des Levels.

Sehen wir uns noch ein Beispiel zu dem Modus FindAncestor an. Er dient dazu, die Datenquelle auf ein im Elementbaum höher liegendes Element eines bestimmten Typs zu setzen. Dieser Modus verlangt, dass in der AncestorType-Eigenschaft des RelativeSource-Objekts der gesuchte Typ angegeben wird.

In unserem Codefragment wollen wir die Eigenschaft Text einer TextBox an die Beschriftung der Titelleiste des Window-Elements binden (Eigenschaft Title).

<TextBox Text="{Binding 
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}},
Path=Title}" />

Listing 22.12 Bindung an ein im Elementbaum höher liegendes Element

Natürlich gibt es andere Fälle, in denen der angegebene Typ mehrfach im Elementbaum auftritt. Sie haben dann die Möglichkeit, mit der Eigenschaft AncestorLevel den n-ten gefundenen Typ anzugeben. Dabei entspricht der Wert 1 dem ersten gefundenen Element dieses Typs. In Listing 22.13 wird der Modus FindAncestor verwendet, um die Content-Eigenschaft eines Button-Objekts an die Eigenschaft Text der TextBox zu binden. Es wird dabei nach der zweiten Schaltfläche gesucht.

<TextBox Text="{Binding 
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Button}, AncestorLevel=1},
Path=Content}" />

Listing 22.13 Die Bindung an die zweite übergeordnete Schaltfläche im Elementbaum


Galileo Computing - Zum Seitenanfang

22.3.3 Die Bindung an »DataContext«Zur vorigen Überschrift

DataContext ist eine Eigenschaft, die von allen Klassen bereitgestellt wird, die von FrameworkElement oder FrameworkContentElement abgeleitet sind. Die Eigenschaft DataContext beschreibt eine Datenquelle. Dabei kann es sich um ein einfaches benutzerdefiniertes Objekt handeln, aber auch um eine Tabelle, die nach einer Datenbankabfrage im lokalen Cache vorliegt.

DataContext hat eine besondere Charakteristik: Man kann ihr im Elementbaum weit oben eine Datenquelle angeben, beispielsweise im Window, z. B.:

this.DataContext = [Datenquelle];

Listing 22.14 Angabe der Datenquelle im »Window«

Allen im Window untergeordneten Elementen stehen nun die Daten zur Verfügung.

Die Bindung der Elemente an die durch DataContext beschriebene Datenquelle erfolgt auch in diesem Fall mit einem Binding-Objekt. Allerdings ist es völlig ausreichend, nur die Path-Eigenschaft festzulegen:

<TextBox Text="{Binding Path=Name}" />

Listing 22.15 Bindung an die in einem übergeordneten Element beschriebene Datenquelle

Sollte in einem Element die explizite Angabe der Datenquelle wie in Listing 22.15 fehlen, wird die WPF zuerst die DataContext-Eigenschaft des betreffenden Elements untersuchen. Sollte diese null sein, sucht die WPF den Elementbaum so lange ab, bis sie zum ersten Mal auf eine DataContext-Eigenschaft stößt, die nicht null ist. Diese wird dann als Datenquelle genutzt. Sollten alle DataContext-Eigenschaften null aufweisen, kann dem Element auch kein Wert zugewiesen werden.

Natürlich kann ein Steuerelement im Bedarfsfall trotzdem auf eine andere Datenquelle verweisen, wenn das gewünscht ist. Dazu ist nur ElementName, Source oder RelativeSource dem Binding-Objekt anzugeben.

Auf ein Beispiel soll an dieser Stelle verzichtet werden. In Kapitel 24 werden Sie noch genügend Beispiele finden, die über DataContext eine Datenquelle angeben.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de