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 »

Win 8.1: Anrufe per Behavior

In einem meiner Posts habe ich darüber geschrieben wie einfach es unter Windows Phone 8.1 ist, einen Anruf zu starten oder eine E-Mail zu schreiben. Da ich diese Funktion nun an mehreren Stellen brauche, habe ich jeweils ein Behavior daraus gemacht. Damit dieses Behavior auch per Blend verwendet werden kann und weil es einfacher zu realisieren ist als attached Behaviors, habe ich es als Blend Behavior gemacht.

Weiterlesen »

Windows Phone 8: Keyboard schließen nach Enter

Ich war etwas überrascht als ich mitbekam, dass es keine Suchbox für Windows Phone gibt, immerhin ist diese ja in Windows 8 enthalten. Andererseits hatte ich mit der unter Windows 8 auch nicht so viel Spaß, da sie kein sauberes MVVM zuließ. Besonders interessant war sie eigentlich für mich auch nur deshalb, da ich nach einer Möglichkeit suchte eine Suche zu starten sobald der Nutzer die Enter Taste betätigt und zeitgleich das Keyboard zu schließen. Dazu eignet sich grundsätzlich auch eine TextBox insofern man etwas Vorarbeit leistet.

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 »