This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: WPF: Objekte manuell an Controls binden
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
DataBinding ist eine wichtige Sache. Schließlich wollen Daten auf der Programmoberfläche ja auch angezeigt werden. Nun stellt sich die Frage, wie dies per Sourcecode-Anweisungen geschehen kann. Hier ein kleines Beispiel dazu.
Die Klasse ist erstellt, nun kommt das eigentliche Binding. Im Konstruktor von Window1 rufen wir eine Methode Init auf, die uns einen EventHandler für das Click-Ereignis des Buttons erstellt, damit die Änderungen angezeigt werden und somit überprüft werden kann, ob das dahinterliegende Objekt auch tatsächlich die korrekten Werte enthält. Weiters wird das Binding definiert.
publicpartialclass Window1 : Window
{
private Person p;
public Window1()
{
InitializeComponent();
Init();
}
privatevoid Init()
{
ShowValuesButton.Click +=
new RoutedEventHandler(ShowValuesButton_Click);
p = new Person("Norbert", "Eder");
Binding firstBinding = new Binding();
firstBinding.Source = p;
firstBinding.Path = new PropertyPath("Firstname");
FirstnameTextBox.SetBinding(TextBox.TextProperty, firstBinding);
Binding lastBinding = new Binding();
lastBinding.Source = p;
lastBinding.Path = new PropertyPath("Lastname");
LastnameTextBox.SetBinding(TextBox.TextProperty, lastBinding);
}
void ShowValuesButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(
String.Format("Lastname: {0} -- Firstname: {1}",
p.Lastname,
p.Firstname));
}
}
Was wir also für das Binding benötigen ist ein Objekt des Typs Binding. Diesem Objekt muss eine Source übergeben werden. Dies kann wiederum ein beliebiges Objekt sein - in unserem Fall ein Objekt des Typs Person. Mit Hilfe der Eigenschaft Path kann nun festgelegt werden, welche Eigenschaft des an die Source übergebenen Objektes gebunden werden soll.
Schließlich muss am Ziel-Control noch das Binding mit Hilfe der Methode SetBinding gesetzt werden. Hierzu ist die gewünschte DependencyProperty (beschreibt welche Eigenschaft des Controls befüllt werden soll) anzugeben und das zuvor erstellte Binding-Objekt. Das gleiche wird nun auch für das zweite Textfeld durchgeführt.
Zur Laufzeit sieht das dann so aus:
Nach jeder Änderung eines der Textfelder sollte die MessageBox diese Änderung auch tatsächlich anzeigen. Wenn dem so ist, dann kann man sich zu einem erfolgreich durchgeführten DataBinding gratulieren.