© best_vector/Shutterstock.com
WPF, Silverlight, Windows Phone 8 und Windows-Store-Apps

Kolumne: XAML Expertise


In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „WPF: PropertyChanged-Event typsicher aufrufen“, „Windows Phone 8: Nokia Imaging SDK“ und „Windows-Store-App: DatePicker und TimePicker Controls“. Viel Spaß mit XAML Expertise.

WPF: PropertyChanged-Event typsicher aufrufen

Ein großes Übel unter XAML ist der zusätzliche Aufwand beim Data Binding. Properties, die verändert werden, müssen die View explizit darüber informieren. Meine bevorzugte Lösung hierfür ist die aspektorientierte Programmierung (kurz AOP), hierbei können die Properties weiterhin einfache auto-Properties mit nur einem getter und setter bleiben. Das verhindert aufgeblähten Sourcecode, und die Übersicht bleibt bestehen. Für die aspektorientierte Programmierung wird das PostSharp-Framework benötigt. Eine Einführung dazu habe ich vor Längerem als Videotraining aufgenommen, das kostenfrei in der MSDN-Mediathek zur Verfügung steht [1].

Das PostSharp-Framework ist für kommerzielle Projekte. Es bietet jedoch ganz neue Best Practices, um das PropertyChanged-Event wenigstens typsicher aufzurufen. Dadurch wird die Fehleranfälligkeit reduziert.

Als gutes Beispiel dazu dienen die Projektvorlagen für Windows-Store-Apps. Hier wird im Common-Verzeichnis die BindableBase-Klasse zur Verfügung gestellt. Sie dient als Basisklasse mit fertig implementierten INotifyPropertyChanged-Interfaces. Das besondere an der Implementierung ist die Verwendung des CallerMemberName-Attributs, das mit dem .NET Framework 4.5 ausgeliefert wurde. Es wird in einem Methodenparameter vom Typ String deklariert. Wird nun diese Methode aufgerufen, gibt das Attribut automatisch den Methodennamen weiter, der für den Aufruf verantwortlich war.

Eine weitere Methode zeigt einen weiteren wichtigen Punkt. Das PropertyChanged-Event sollte nur ausgelöst werden, wenn sich der neue Wert tatsächlich vom bestehenden unterscheidet. Das erspart unnötiges Rendern im XAML.

Die BindableBase-Klasse ist so einfach gestrickt, dass sie natürlich auch unter WPF 4.5 selbst geschrieben und verwendet werden kann. Listing 1 zeigt die BindableBase-Klasse und Listing 2, wie einfach sie verwendet wird.

Listing 1: Die neue „BindableBase“-Klasse

public abstract class BindableBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected bool SetProperty<T>(re...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang