This article has been localized into German by the community.
Verwenden des DataContext
Die DataContext Eigenschaft ist die Standard-Quelle für Bindings, außer man deklariert explizit eine andere Quelle, wie wir im vorhergehenden Kapitel mit der ElementName Eigenschaft zeigten. Dies ist in der FrameworkElement Klasse definiert, von welchem die meisten UI Steuerelemente inklusive des WPF Window erben. Einfach gesagt, kann man damit eine Basis für die Bindings bestimmen.
Es gibt keine Standard-Quelle für die DataContext-Eigenschaft (Sie ist zu Beginn einfach null), aber da der DataContext durch die ganze Control-Hierarchie geerbt wird, kann man den DataContext auf das Window selber setzten und in allen Abkömmlingen davon verwenden. Lass uns dies anhand eines einfachen Beispiels zeigen:
<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataContextSample" Height="130" Width="280">
<StackPanel Margin="15">
<WrapPanel>
<TextBlock Text="Window title: " />
<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />
</WrapPanel>
<WrapPanel Margin="0,10,0,0">
<TextBlock Text="Window dimensions: " />
<TextBox Text="{Binding Width}" Width="50" />
<TextBlock Text=" x " />
<TextBox Text="{Binding Height}" Width="50" />
</WrapPanel>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.DataBinding
{
public partial class DataContextSample : Window
{
public DataContextSample()
{
InitializeComponent();
this.DataContext = this;
}
}
}
Der Code hinter diesem Beispiel fügt nur eine zusätzliche interessante Zeile hinzu: Nach dem üblichen InitalizeComponent() Aufruf wird die "this" Referenz als DataContext zugeordnet, das heißt, das Window selber wird zum Daten-Kontext.
Im XAML verwenden wir dies, um an mehrere der Fenstereigenschaften wie Titel, Breite und Höhe zu binden. Da das Fenster einen DataContext hat, der an die untergeordneten Steuerelemente übergeben wird, müssen wir nicht auf jedem der Bindungen eine Quelle definieren - wir verwenden die Werte einfach so, als wären sie global verfügbar.
Führe das Beispiel aus und ändere die Größe des Fensters - Du wirst sehen, dass die Größenänderungen sofort in den Textfeldern angezeigt werden. Du kannst auch einen anderen Titel in das erste Textfeld schreiben, aber Du wirst überrascht sein, dass diese Änderung nicht sofort wirksam wird. Stattdessen musst Du den Fokus auf ein anderes Steuerelement verschieben, bevor die Änderung sich auswirkt. Warum? Nun, das ist das Thema für das nächste Kapitel.
Zusammenfassung
Die Verwendung der DataContext-Eigenschaft ist wie das Setzen der Basis aller Bindungen entlang der ganzen Hierarchie der Controls. Dies erspart den Aufwand, für jede Bindung eine Quelle manuell zu definieren, und sobald Du wirklich mit der Verwendung von Datenbindungen beginnst, wirst Du die eingesparte Zeit und Tipparbeit bestimmt zu schätzen wissen.
Dies bedeutet jedoch nicht, dass Du den gleichen DataContext für alle Controls innerhalb eines Windows verwenden musst. Da jedes Steuerelement seine eigene DataContext-Eigenschaft hat, kannst Du die Vererbungskette leicht durchbrechen und den DataContext mit einem neuen Wert überschreiben. Dies erlaubt es, so etwas wie einen globalen DataContext auf dem Fenster und dann einen lokaleren und spezifischeren DataContext zu benutzen, z.B. auf einem Panel, das ein separates Formular enthält.