110 likes | 214 Views
Windows Presentation Foundation WS 2013/14 Prof. Dr. Herrad Schmidt. Kapitel 5 Data Binding. Dependency Properties s.a. http://msdn.microsoft.com/en-gb/library/ms752914.aspx
E N D
Windows PresentationFoundationWS 2013/14Prof. Dr. Herrad Schmidt Kapitel 5 Data Binding
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.
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).
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 bindingtargetobject, targetproperty, bindingsource und pathtothevalue, dataflow, UpdateSourceTrigger
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-EigenschaftOneWay (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
Ressourcen s.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.
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.
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));
Data Binding an Collections • Anzeige für Datenlisten: ItemsControl und abgeleitete Controls • Zum Binden von ItemsControl an ein collectionobject 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 collectiondie INotifyPropertyChanged-Schnittstelle implementieren.
Collection Views • Zwischen der Collection und dem ItemsControl liegt eine CollectionView. • Sie stellt einen Zeiger auf das aktuell selektierte Objekt (CurrentItemproperty) 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 sourcecollection. • 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.
Solution 5_DataBinding • A_BindungAnSteuerelemente • B_BindungAnRessourcen • C_DataContext • D_Benachrichtigung • E_ObservableCollection • F_MasterDetail • G_Ressourcen • H_Internationalisierung