Refactoring pattern for WPF UserControls

Legacy WPF Code enthält meist eine große Anzahl von UserControls, die ihrerseits massig Logik enthalten weil kein sauberes MVVM verwendet wurde. Um diesen Umstand zu beseitige braucht man aber meist eine gute Testabdeckung um nicht versehentlich etwas kaputt zu machen. In diesem Fall bekommt man dann aber nicht selten schon Probleme das entsprechende UserControl im Test zu instanziieren, weil die InitializeComponents Methode Ressourcen akquiriert die in der Testumgebung nicht vorhanden sind, da diese nicht im GUI Thread läuft. Was also tun? Die InitializeComponents Methode dient im Grunde nur dafür die UI des Controls zu rendern. Ihr interner Aufbau, also die eigentlichen Komponenten und auch das Verhalten des Controls, existieren auch ohne jene Methode. Für Tests brauchen wir InitializeComponents also überhaupt nicht. Um nun aber minimalinvasiv vorgehen zu können, müssen wir uns eine Stelle herauspicken, an der wir das Verhalten des

Weiterlesen »

How-To: Regionen und mehrere Dialoge in WPF darstellen

Eine Sache die bis heute in WPF fehlt, ist eine anständige MessageBox, weswegen man sich diese in aller Regel selbst programmieren muss oder auf die Implementierung der Windows Forms zurückgreift. Aber auch außerhalb der typischen Szenarien die mit den bekannten MessageBoxen abgedeckt werden, ist es immer wieder hilfreich mehrere UserControls innerhalb eines Windows oder in Form von sich überlagernden Dialogen darzustellen. Mir wurde die Frage gestellt wie man dies realisieren könnte und da ein entsprechendes Blockpost wieder sehr lang geworden wäre, habe ich mich dazu entschieden ein Video zu machen. Interessant dabei dürfte sein, dass man das darin erklärte Vorgehen zum Anzeigen eines Popups (damit sind nicht WPF Popups gemeint) auch und gerade mit Microsofts Prism sehr gut nutzen kann.

Weiterlesen »

How-To: Handgefertigtes Bootstrapping & View Handling in WPF

Ich wurde per Twitter gefragt ob ich mir nicht ein wenig Quellcode einer WPF Applikation ansehen könnte um diverse Tipps zu dessen Verbesserung zu äußern. Statt aber nur aufzuzeigen was mir daran nicht gefällt, habe ich mich daran gemacht zu beschreiben welchen anderen Weg man gehen kann um mehrere Ansichten innerhalb einer WPF Anwendung zu verwalten und diese Anwendung auch noch korrekt zu initialisieren.

Weiterlesen »

Xaml: ViewModel für die Designzeit

Wenn es etwas gibt, dass ich bei der Nutzung von Xaml besonders mag, dann ist es die strikte Trennung zwischen Logik und Darstellung. Alles was zur Darstellung gehört, wird in Xaml geschrieben, die Logik wiederum findet sich im testbaren ViewModel. Dies erlaubt eine einfache Trennung der Verantwortlichkeiten und eine Parallelisierung der Arbeit, weil Designer und Entwickler unabhängig von einander arbeiten. Damit der Designer dabei auch wirklich unabhängig vom Entwickler, nicht aber an diesem vorbei, arbeitet, sollten sich beide auf eindeutige Schnittstellen einigen. Das Wort „Schnittstelle“ kann dabei ruhig wörtlich genommen werden. Denn wenn sich beide zum Beispiel auf ein Interface für ein ViewModel einigen, kann es anschließend zwei dieser ViewModels geben. Eines, das nur die Logik für die Anzeige enthält und eines mit der tatsächlichen Logik die zur Laufzeit gebraucht wird.

Weiterlesen »

Coded UI Test: Validierung auf UI Ebene prüfen

Ein wiederkehrendes Problem das es zu lösen gilt wenn man typische Oberflächen testen möchte, ist die Prüfung auf einen Validierungsrahmen. Solche Rahmen werden immer dann eingesetzt wenn der Nutzer auf eine Falscheingabe hingewiesen werden soll. Dummerweise kann die UI Automation uns keine Informationen über jene Rahmen geben, da sie sie selbst nicht kennt. Wie also vorgehen?

Weiterlesen »

Developer Openspace 2012 – Erneut ein Erlebnis

Nun ist er vorbei, der Developer Openspace 2012 und hat mal wieder einen bleibenden Eindruck in meinem Langzeitgedächtnis hinterlassen. Dies fing schon mit dem interessanten und lehrreichen Workshop zu Windows Azure an. Danke an der Stelle an Sascha Dittmann für die (kostenlos) dargebotenen Informationen und die spätere Session zu Azure Service Bus. Damit sind wir auch schon beim Thema, denn ich bin erneut überrascht mit welcher Qualität an Workshops und Sessions hier aufgewartet wurde. Alle Leute waren hoch motiviert, begeistert bei der Sache und nicht zögerlich Wissen aufzusaugen oder zu verbreiten, selbst wenn es um Themen ging die Entwickler laut Stereotyp nur peripher interessieren.

Weiterlesen »

How-To: Charts mit WPF und Silverlight

Bei WPF bzw. Silverlight gibt es grundsätzlich die gleiche „Problematik“ wie bei Windows Forms bis .Net 4.0: Diagramme gehören einfach nicht zum Lieferumfang des Frameworks. Deshalb muss man in der Regel zu Dritt-Herstellern greifen, bindet die Charts von Windows Forms ein oder sucht sich kostenlose Alternativen. In diesem Artikel soll es zunächst um die letztere Fassung gehen wobei in dem Fall zwischen Dynamic Data Display und dem WPF- bzw. Silverlight Toolkit gewählt werden kann. Nachfolgend werden die beiden Fassungen aus den Toolkits näher beschrieben.

Weiterlesen »

How-To: UserControls in ItemsControl mit Überschriften trennen

Eine der wichtigsten Gründe Prism einzusetzen ist die Möglichkeit die GUI in Regionen aufzuteilen. Jede dieser Regionen wird als Content-, Items- o.ä. Control repräsentiert und kann dann zur Laufzeit mit 1 (ContentControl) bis n (Items– oder TabControl) UserControls bestückt werden. Auf diese Weise wird die eigentliche Benutzeroberfläche lose gekoppelt und kann ohne größeren Aufwand an neue Anforderungen angepasst werden. Ein immer wiederkehrendes Problem stellt für mich dabei die Nutzung des ItemsControl dar. Jenes zeigt die einzelnen Views in Form einer Liste an, was unter Umständen etwas langweilig und verwirrend wirken kann. Aus diesem Grund bietet es sich an, jene Views durch Überschriften oder Abgrenzungen voneinander zu trennen, aber wie kriegt man das hin? Kann man es evtl. auch ohne Prism verwenden? Und vor allem wie schafft man es mit möglichst wenig Aufwand?

Weiterlesen »

Pattern, Clean Code & Prism – Vortrag an der HTW-Dresden vom 16.01.2012

Das Semester neigt sich dem Ende, die Vorlesungen sind fast alle gehalten und so ist jetzt eine gute Möglichkeit den Studenten ein wenig Wissen abseits des eigentlichen Lehrplans zu vermitteln. Dank Professor Nestler hatte ich auf diese Weise wieder die Möglichkeit einen Spezialvorlesung an der HTW-Dresden zu halten. Nach dem ich mich beim letzten Mal im Juni vor allem der agilen Entwicklung und dem automatisierten Test gewidmet hatte, ging es dieses Mal um Pattern, Clean Code und Prism.

Weiterlesen »