DI Harald Bernkopf, zSPM, Software Architekt und Projektmanager, ANECON:

Smart Clients mit WPF UI und .NET 3.5
...denn morgen ist heute schon gestern

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.

 
Zum Seitenanfang
Seite Drucken

Anecon Software Design und Beratung G.M.B.H. Alser Strasse 4 / Hof 1 A-1090 Wien Tel. +43 1 409 58 90-0 Fax -998 E-Mail Link