Windows Presentation Foundation WS 2013/14Prof. Dr. Herrad Schmidt
Kapitel 5
Data Binding
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 2
Dependency Properties
s.a. http://msdn.microsoft.com/en-gb/library/ms752914.aspx
Dependency Properties stellen eine Erweiterung der „klassischen“ Properties dar und bieten damit weitere Funktionalitäten:
automatische Aktualisierung der abhängigen Objekte
Property-Vererbung über den Visual Tree
eine integrierte Validierung
die Deklaration von Standardwerten
den Aufruf von Callback-Methoden, wenn Wertänderungen aufgetreten sind
Animationen
Data Binding
Styles
Attached Properties sind eine spezielle Variante der Dependency Properties. Dabei werden die Werte eines Eltern-Elements im Kind-Element gesetzt.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 3
Dependency Property System
Eine Klasse die von der Klasse DependencyObject (s.a.http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject(VS.100).
aspx#inheritanceContinued)erbt, kann am Dependency Property System partizipieren, kann also Dependency Properties besitzen.
Viele Properties der Controls sind Dependency Properties. Sie lassen sich aber wie „normale“ Properties nutzen, weil sie durch wrapper „versteckt“ werden.
Dependency Properties werden bei einem Element/Objekt gesetzt und gelten dann für alle untergeordneten Controls Ausnahme 1: Vererbt wird nur, wenn FrameworkPropertyMetadata.Inherits für dieses Dependency Property auch auf true gesetzt ist.Ausnahme 2: Einige Controls wie StatusBar, Menu und ToolTip setzen ihre font-Properties intern. Sie werden bestimmt durch die Einstellungen des Control Panel (Systemeinstellungen).
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 4
Data Binding
s.a. http://msdn.microsoft.com/en-us/library/ms752347(VS.100).aspx
Dependency Properties können an verschiedene Arten von Datenquellen gebunden werden. Bei den Daten kann es sich um CLR-Objekte oder XML-Daten handeln.s.a. http://msdn.microsoft.com/en-us/library/ms743643(VS.100).aspx
Das Benachrichtigungssystem von WPF kann die Aktualisierung von Daten automatisieren.
Modell (Quelle: s.o.) mit binding target object, target property, binding source und path to the value, data flow, UpdateSourceTrigger
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 5
Erstellen einer Bindung in XAML
unter Verwendung der Markuperweiterung Binding
Angabe der Bindungsquelle mittels einer der Alternativen: ElementName (Bindung an andere Elemente) Source (in einzelnen Bindungsdeklarationen) DataContext (für das jeweilige Element oder ein übergeordnetes) RelativeSource (Quelle relativ zum Ziel, z.B. Self)
Angabe des Pfades zum Wert mittelsPath oder Xpath (XML-Daten)sofern der Wert nicht identisch ist mit dem binding source object
Evtl. setzen der Mode-Eigenschaft OneWay (default) Änderungen der source property führen
automatisch zur Änderung der target property TwoWay gegenseitige Automatisierung OneWayToSource Änderungen der target property führen
automatisch zur Änderung der source property
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 6
Ressourcens.a. http://msdn.microsoft.com/en-us/library/ms750613(VS.100).aspx
WPF-Ressourcen erlauben die Wiederverwendung von Objekten und Werten.
Binäre Ressourcen: Dateien, die Bilder, Musik, Videos in Form von binären Datenströmen enthalten, und in die Assembly der Applikation eingebettet werden, z.B. <image Source=“Images/Bild.jpg“ /> Logische Ressourcen: Objekte einer Klasse werden (meist in XAML) bei einem WPF-Element definiert und an verschiedenen Stellen im XAML-Dokument referenziert.Als Ressource lässt sich ein Objekt beliebiger Klassen verwenden, allerdings muss die Klasse einen parameterlosen Konstruktor besitzen.Elemente können statisch oder dynamisch (nur bei Dependency Property) auf die Ressourcen zugreifen.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 7
Logische Ressourcen
Ein FrameworkElement verfügt über ein Resources-Property vom Typ ResourceDictionary. Alle abgeleiteten Controls können damit einen Resources-Abschnitt definieren, z.B.<Window.Resources>
<SolidColorBrush x:Key="MyBrush" Color=“Aqua"/>
</Window.Resources>
Logische Ressourcen in App.xaml stehen anwendungsweit zur Verfügung.
Die Ressource muss bekannt sein, bevor sie benutzt wird.
Kinderelemente können eine bestimmte Ressource mit der StaticResource- oder DynamicResource-Markup-Extension über den key der Ressource referenzieren, z.B. <Ellipse Fill="{StaticResource MyBrush}"/>
Nach der Ressource wird aufwärts im Logical Tree, danach im Application-Objekt und danach bei den systemweiten Ressourcen (SystemParameters, SystemFonts, SystemColors, theme-spezifische Ressourcen) gesucht.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 8
INotifyPropertyChanged-Schnittstelle
Implementiert eine Klasse die INotifyPropertyChanged-Schnittstelle können Benachrichtigungen über Änderungen einer Property an ein gebundenes Steuerelement übermittelt werden.
Implementierung: Bildung einer Klasse, die INotifyPropertyChenged implementiert z.B. public class Artikel : INotifyPropertyChanged Deklaration des PropertyChanged event: public event PropertyChangedEventHandler PropertyChanged; Auslösen des Ereignisses, wenn sich ein Property ändert: PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 9
Data Binding an Collections
Anzeige für Datenlisten: ItemsControl und abgeleitete Controls
Zum Binden von ItemsControl an ein collection object dient die Property ItemsSource.
Es kann jede collection verwandt werden, die die IEnumerable-Schnittstelle implementiert.
Um automatische Aktualisierung zu erreichen, muss die collection die INotifyPropertyChanged-Schnittstelle implementieren. Dafür stellt WPF die ObservableCollection(T)-Klasse zur Verfügung.
Zur vollständigen Aktualisierung aller Datenwerte muss auch ein Objekt in der collection die INotifyPropertyChanged-Schnittstelle implementieren.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 10
Collection Views
Zwischen der Collection und dem ItemsControl liegt eine CollectionView.
Sie stellt einen Zeiger auf das aktuell selektierte Objekt (CurrentItem property) bereit. Dieses Objekt kann in einem ContentControl angezeigt werden. Voraussetzung: IsSynchronizedWithCurrentItem="True" beim ItemsControl.
Die CollectionView wird explizit vom Entwickler oder implizit von der WPF erstellt (DefaultView).
Sie realisiert Sortier-, Filter- und Gruppierungsabfragen, ohne Änderung der source collection.
Für das Filtern, Sortieren und Gruppieren in XAML wird ein CollectionViewSource-Element benutzt und an die Collection gebunden. Das ItemsControl wird an das CollectionViewSource-Element gebunden.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14
Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 5Folie 11
Solution 5_DataBinding
A_BindungAnSteuerelemente
B_BindungAnRessourcen
C_DataContext
D_Benachrichtigung
E_ObservableCollection
F_MasterDetail
G_Ressourcen
H_Internationalisierung