
DI Harald Bernkopf, zSPM, Software Architekt und Projektmanager, ANECON:
Trennung von Daten, Logik und Presentation
Ein zentrales Konzept in ist der Binding-Mechanismus. Dabei können sämtliche Eigenschaften von UI Objekten (Controls) an Datenobjekte gebunden werden. Um den Rest kümmert sich dann WPF. Dadurch entfällt das lästige Populieren und Auslesen von Datenfeldern in Masken völlig.

Auch die Darstellung aller Controls (auch Standard Controls) kann mittels XAML ohne Programmierung von C# Code komplett angepasst werden. Es ist lediglich die Definition von Templates und Styles notwendig. Mittels Template Switching kann der Style auch während der Laufzeit ausgetauscht werden. Dadurch können Stati von Datenobjekten die Repräsentation von Controls steuern.
Der Binding-Mechanismus geht soweit, dass auch Kommandos (Menüs, Buttons,...) an eigene Commandobjekte gebunden werden können (Command-Pattern). Dadurch ist die Implementierung der Kommandos völlig unabhängig von der GUI. Durch die Implementierung der canExecute-methode je Kommando ist etwa die Realisierung einer Berechtigungssteuerung der Anwendung überraschend simpel. Auch eine Undo-Funktion ist mit diesem Pattern relativ einfach zu realisieren.
Erweiterbarkeit
Features, die in WPF (noch) nicht out-of-the-box verfügbar sind, konnten wir Dank der Erweiterungsmöglichkeit der Sprache selbst realisieren. Etwa ein Docking-Framework.
Mittels Dependency- bzw. Attachted-Properties können Erweiterungen in bestehende Controls „injected“ werden. So „fehlt“ in WPF z.b. Drag&Drop – ist zwar leicht zu implementieren, um aber alle Controls verschieben zu können kommen Attached Properties zum Einsatz.
Mittels Markup Extensions kann die ‚XAML‘ Syntax selbst erweitert werden.
Etwa Lokalisierung: durch eigene Markup-Extensions haben wir den Zugriff auf die lokalisierten Resourcestrings realisiert. Da der Zugriff ‚gebunden‘ ist, ist es möglich, alle lokalisierten Texte mit einem Schlag auf eine andere Sprache umzustellen.
Binding mittels Lambda Expressions: es ist möglich ein Binding auch mittels Lambda – Expressions (.NET 3.5, LINQ) im XAML-Code durchzuführen. Dadurch ersparen wir uns viele kleine Converter.
Markup Extensions leisten auch gute Dienste für die Sortierung und Filterung von Listenelementen (DataSources) unter Ausnutzung von LINQ.
Interoperabilität mit WinForms
Ja, WPF spielt auch interoperabel mit WinForm-Controls zusammen. Oft ist es nötig und sinnvoll WinForm Controls in einem WPF Window einzubinden, oder ein WPF Control in ein WinForm Window. Beides machbar, solange man sich an die Regel: „one window, one pixel, one technology“ hält. In einem Projekt haben wir sogar JAVA Applets in ein WPF Grid eingebunden.
Durch die Interoperabilität kann die WPF Umstellung einer Applikation in beliebig vielen Schritten erfolgen.
Let’s XAML
Leider fallen die verfügbaren Designtools eher unter die Eingangs genannten Einstiegshürden. Um die Möglichkeiten von WPF auch nur im Ansatz auszunützen kommt man an XAML nicht vorbei. Die Lernkurve ist beträchtlich. Aber: wir haben sie genommen, und: es zahlt sich aus.