Post on 23-Jan-2019
Überblick
� Element-Bindung via Eigenschaften-Editor
� Grenzen des Eigenschaften Editors
� Die C# Klasse Binding
� Bindung an C# Objekte� Bindung an C# Objekte
2Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Einführung
� Bindungen werden zwischen zwei Elementen definiert.
� Datenquelle �� Datenziel.
� Im Datenziel wird eine oder mehrere Eigenschaften an eine Datenquelle verbunden.
� Die Datenquelle kann
� Die Eigenschaft eines anderen Elements (z. B. eines Steuerelement) � Die Eigenschaft eines anderen Elements (z. B. eines Steuerelement) sein � Element-Bindung.
� Oder eine � Daten-Bindung, das heisst
� die Daten-Quelle ist ein C# Objekt
� eine Auflistung,
� eine Datenbank,
� eine XML-Datei.
� . . . 4
Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Element-Bindung via Element-Bindung via Eigenschaften Editor
5Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Inhalt des Labels an die TextBox binden
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label FontSize="18">Bindungs-Beispiel</Label>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center">
</Label>
<TextBox Margin="10,0" Name="textBox1" FontSize="14">
</TextBox></TextBox>
</StackPanel>
</Window>
6Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Den Fokus auf das «leere» Label setzen
Inhalt des Labels an die TextBox binden
Im Eigenschaftenfenster von Label die kleine Box rechts von «Content» auswählen.
7Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Menu-Punkt«Datenbindung erstellen»auswählen
Inhalt des Labels an die TextBox binden
Datenquelle ElementName auswählen
Element textBox1 auswählen
(vgl. Name im XAML - Code !)
8Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
XAML - Code !)
Inhalt des Labels an die TextBox binden
Pfad Text auswählen
9Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Mit OK bestätigen
Inhalt des Labels an die TextBox binden
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label FontSize="18">Bindungs-Beispiel</Label>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center"
Content="{Binding Text, ElementName=textBox1}">
</Label>
<TextBox Margin="10,0" Name="textBox1" FontSize="14"><TextBox Margin="10,0" Name="textBox1" FontSize="14">
</TextBox>
</StackPanel>
</Window>
10Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Natürlich ist es auch möglich, diese
Element-Bindung (viel schneller) von
Hand zu schreiben.
Das Resultat
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label FontSize="18">Bindungs-Beispiel</Label>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center">
<Binding ElementName="textBox1" Path="Text"/>
</Label>
<TextBox Margin="10,0" Name="textBox1" FontSize="14"><TextBox Margin="10,0" Name="textBox1" FontSize="14">
</TextBox>
</StackPanel>
</Window>
11Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Beim Selber-Schreiben, bietet es sich
an, die einfachere Element-Notation
zu verwenden.
Label an ListBoxLabel an ListBoxbinden
12Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Ausgangspunkt
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center">
</Label>
<ListBox Margin="10,0" Name="listBox1" FontSize="14">
<ListBoxItem>Andrea</ListBoxItem>
<ListBoxItem>Benno</ListBoxItem><ListBoxItem>Benno</ListBoxItem>
<ListBoxItem>Corinne</ListBoxItem>
<ListBoxItem>David</ListBoxItem>
<ListBoxItem>Eva</ListBoxItem>
<ListBoxItem>Felix</ListBoxItem>
<ListBoxItem>Gabi</ListBoxItem>
<ListBoxItem>Hannes</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
13Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Die Verknüpfung mit einer
Auswahl-Liste wird vom
Editor nur teilweise
unterstützt.
Eigenschaften-Editor
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center">
</Label>
<ListBox Margin="10,0" Name="listBox1" FontSize="14">
<ListBoxItem>Andrea</ListBoxItem>
<ListBoxItem>Benno</ListBoxItem><ListBoxItem>Benno</ListBoxItem>
<ListBoxItem>Corinne</ListBoxItem>
<ListBoxItem>David</ListBoxItem>
<ListBoxItem>Eva</ListBoxItem>
<ListBoxItem>Felix</ListBoxItem>
<ListBoxItem>Gabi</ListBoxItem>
<ListBoxItem>Hannes</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
14Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Die Verknüpfung mir einer
Auswahl-Liste wird vom
Editor nur teilweise
unterstützt.
Was der Eigenschaften-Editor erzeugt
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center"
Content="{Binding SelectedItem, ElementName=listBox1}">
</Label>
<ListBox Margin="10,0" Name="listBox1" FontSize="14">
<ListBoxItem>Andrea</ListBoxItem><ListBoxItem>Andrea</ListBoxItem>
<ListBoxItem>Benno</ListBoxItem>
<ListBoxItem>Corinne</ListBoxItem>
<ListBoxItem>David</ListBoxItem>
<ListBoxItem>Eva</ListBoxItem>
<ListBoxItem>Felix</ListBoxItem>
<ListBoxItem>Gabi</ListBoxItem>
<ListBoxItem>Hannes</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
15Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Der erzeugte Code ist
nicht vollständig und muss
von Hand ergänzt
werden.
.Content ergänzen
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center"
Content="{Binding SelectedItem.Content, ElementName=listBox1}">
</Label>
<ListBox Margin="10,0" Name="listBox1" FontSize="14">
<ListBoxItem>Andrea</ListBoxItem><ListBoxItem>Andrea</ListBoxItem>
<ListBoxItem>Benno</ListBoxItem>
<ListBoxItem>Corinne</ListBoxItem>
<ListBoxItem>David</ListBoxItem>
<ListBoxItem>Eva</ListBoxItem>
<ListBoxItem>Felix</ListBoxItem>
<ListBoxItem>Gabi</ListBoxItem>
<ListBoxItem>Hannes</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
16Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Element Schreibweise
<Window x:Class="ueb5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Einfache Elementbindung" Height="230" Width="300">
<StackPanel>
<Label Height="25" Margin="10" FontSize="14" HorizontalAlignment="Center">
<Binding ElementName="listBox1" Path="SelectedItem.Content"/>
</Label>
<ListBox Margin="10,0" Name="listBox1" FontSize="14">
<ListBoxItem>Andrea</ListBoxItem><ListBoxItem>Andrea</ListBoxItem>
<ListBoxItem>Benno</ListBoxItem>
<ListBoxItem>Corinne</ListBoxItem>
<ListBoxItem>David</ListBoxItem>
<ListBoxItem>Eva</ListBoxItem>
<ListBoxItem>Felix</ListBoxItem>
<ListBoxItem>Gabi</ListBoxItem>
<ListBoxItem>Hannes</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
17Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Auch hier bietet es sich an,
die einfachere Notation zu
verwenden.
Beispiel 2: Bindung via C# Code
namespace ueb5
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Binding binding = new Binding("SelectedItem.Content");
binding.ElementName = "listBox1";binding.ElementName = "listBox1";
label.SetBinding(Label.ContentProperty, binding);
}
}
}
18Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Statt im XAML-Code kann die
Datenbindung auch im C#
Code definiert werden.
Die Klasse Binding
� Dient als Verbindung zwischen
− Ziel-Objekten (normalerweise WPF-Elemente) und
− einer Datenquelle (z. B. eine Datenbank, eine XML-Datei oder ein beliebiges Objekt mit Daten)
20Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Bindung
Die Klasse Binding
Bindung
21Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Eine Bindung besteht aus einem Bindungsziel, (mit einer Abhängigkeits-Eigenschaft), einer Bindungsquelle sowie dem Pfad zum konkreten Wert in der Bindungsquelle. Diese kann im XAML oder im C# Code erzeugt werden.
In XAML wird die Bindung erstellt durch: <Binding .../>also zum Beispiel <Binding ElementName=" . . . " Path=" . . . "/>
In C# wird ein Bindungsobjekt durch einen Konstruktor erzeugtBinding b = new Binding(. . .).
Die Eigenschaften der C# Klasse Binding
ElementNameGibt den Namen des Steuerelements (vom GUI) an, welches als Datenquelle dient.
PathPath ist die Eigenschaft (Property) an welche die Daten gebunden werden (Value, Text, Content, …)
ModeDefiniert den Bindungsmodus (Aktualisierungsmodus) fest. Dieser kann einseitig (OneWay) oder beidseitig (TwoWay) zwischen GUI Mode kann einseitig (OneWay) oder beidseitig (TwoWay) zwischen GUI und Datenobjekt sein. Default ist TwoWay.
ConverterGibt das Objekt an, welche als Converter (Übersetzer) verwendet werden soll.
Source Legt das Objekt fest, welches als Quelle der Datenbindung dient.
UpdateSourceTriggerDefiniert, wann die Datenquelle aktualisiert werden soll (z.B. jedesmal wenn sich die die Daten ändern).
22Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Datenbindung an C# Datenbindung an C# Person Objekt
23Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Die Daten-Quelle: Die Klasse Person
public class Person
{
private String name;
private int idNummer;
public Person(String n, int id)
{
this.name = n;
this.idNummer = id;
}
Die Klasse Person, mit Name und IDNummer.
Konstruktor
public String Name
{
get { return name; }
set { name = value; }
}
public int IDNummer
{
get { return idNummer; }
set { idNummer = value; }
}
}
24Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Zugriffsmethoden (get/set) für alle Eigenschaften (Properties)
Erstellen des Person Objekts und setzen als Datenquelle
// MainWindow.xaml.cs
using System.Windows;
namespace bindung
{
public partial class MainWindow : Window
{
public Person p = new Person("Meier", 2423);
public MainWindow()Person p ist die
public MainWindow()
{
InitializeComponent();
DataContext = p;
}
}
}
25Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Person p ist die Datenquelle für die XAML-Seite
Verbindung (Binding) im XAML Code
<DockPanel Width="230">
<Label DockPanel.Dock="Top" Width="190">Personen-Angaben</Label>
<Button Content="OK" DockPanel.Dock="Bottom" Margin="50,5"/>
<UniformGrid Columns="2" Height="80">
<Label>Name</Label>
<TextBox >
<Binding Path="Name" Mode="TwoWay"/>
</TextBox>
<Label>ID-Nummer</Label>
<TextBox>
<Binding Path="IDNummer" Mode="TwoWay"/>
Zweiseitige Datenbindung (lesen und schreiben)
<Binding Path="IDNummer" Mode="TwoWay"/>
</TextBox>
<Label>
<Binding Path="Name" Mode="OneWay"/>
</Label>
<Label>
<Binding Path="IDNummer" Mode="OneWay"/>
</Label>
</UniformGrid>
</DockPanel>
26Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Da das Person Objekt die Datenquelle ist, kann direkt auf die Eigenschaften (Properties) Name und IDNummer von Person zugegriffen werden.
Datenbindung für das Einschreibe-Formular
27Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Einschreibe-Formular
Die Klasse Einschreibung
public class Einschreibung
{
private String name;
private String vorname;
private String fach;
private int semester;
public String Name
{
get { return name; }
set { name = value; }
Jedes Feld des Formulars erhält hier eine Eigenschaft (eine Property).
set { name = value; }
}
. . . .
public int Semester
{
get { return semester; }
set {semester = value; }
}
}
28Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Für jede Property müssen die Zugriffsmethoden (get/set) implementiert werden.
Die Klasse Einschreibung
public partial class MainWindow : Window
{
Einschreibung einschreibung =
new Einschreibung("Muster", "Peter", "Maschinentechnik",2);
public MainWindow()
{
InitializeComponent();
einschreibung erzeugen
einschreibung als Datenquelle InitializeComponent();
DataContext = einschreibung;
}
}
29Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Datenquelle festlegen.
Der XAML Code
<DockPanel>
<Label DockPanel.Dock="Top" Content="Anmeldung" FontSize="20" Margin="20"/>
<UniformGrid DockPanel.Dock="Bottom Rows="1" Margin="40,5">
<Button Content="Abbrechen" Margin="5" Width="80" IsCancel="True"/>
<Button Content="Speichern" Margin="5" Width="98" IsDefault="True"/>
</UniformGrid>
<Grid Width="300">
. . . Labels definieren . . .
<StackPanel Grid.Row="0" Grid.Column="1">
<TextBox Width="173" Margin="2">
einschreibung /DataContextim Fenster benutzen
<TextBox Width="173" Margin="2">
<Binding Path="Name" Mode="TwoWay"/>
</TextBox>
<TextBox Width="173" Margin="2">
<Binding Path="Vorname" Mode="TwoWay"/>
</TextBox>
<TextBox Width="173" Margin="2">
<Binding Path="Fach" Mode="TwoWay"/>
</TextBox>
. . .
</DockPanel>
30Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012