From DataTrigger to VisualStateManager

Viele WPF-Entwickler kennen die Vorzüge der DataTrigger-Komponente aus der Desktop-Entwicklung. Die DataTrigger-Komponenten werden typischerweise verwendet um auf Änderungen im ViewModel zu reagieren und das User Interface dementsprechend anzupassen.
Das folgende Code-Stück zeigt eine typische Verwendung von DataTriggers in Desktop Applikationen: Das ListItem soll nicht/anders dargestellt werden, falls kein Text vorhanden ist.

In WinRT besteht diese Möglichkeit nicht mehr. Die Trigger-Funktionalitäten, bis auf den EventTrigger, wurden aus dem Framework entfernt.

VisualStateManager als Ersatz für den DataTrigger

VisualStateManger gibt dem Entwickler die Möglichkeit, das Aussehen des Controls auf State-Basis aufzuteilen.
Eine mögliche Implementierung für das gleiche Szenario wie oben könnte wie folgt aussehen (Nachfolgend zum Code werden die einzelnen Komponenten erklärt):

Durch den VisualStateManager gestaltet sich der Code bereits für simple Beispiele um einiges komplexer. Bei grösseren Controls kann durch das Konzept vom VisualStateManager allerdings Komplexität eingespart werden. Weiterführende Informationen: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.visualstatemanager.aspx

VisualManager.VisualStateProperty=“{Binding HasText}“

Das VisualStateManager-Konzept sieht standardmässig keine Anbindung ans ViewModel vor. Üblicherweise wird durch die Status im Code behind navigiert. Z.B:

Das Binding auf das ViewModel ist möglich mithilfe von Attached Properties. Das Kernstück der Implementation ist der ValueChangeHandler, welcher den VisualState des Controles bei jeder Änderungen des gebunden Wertes mitverändert.

VisualStateManager.CustomVisualStateManager

Der ExtendedVisualStateManager wird benötigt, falls auf der State von einem FrameworkElement (z.B. Grid) verändert werden muss. Der standardmässige VisualStateManager funktioniert nur mit Controls.
Der folgende Code ist ein Subset vom ExtendedVisualStateManager von Silverlight:

Fazit

Mit dem VisualStateManager stellt Microsoft ein mächtiges Werkzeug zur Verfügung. Mithilfe von zusätzlichen Klassen ist es möglich den User Interface-Code vom Domainen-Code zu trennen. So finden sich geübte WPF-Programmierer schnell mit dem VisualStateManager zurecht und profitieren bald von den effizienteren und anpassbareren Möglichkeiten von WinRT.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>