WPF Evaluation: Spaß mit der StaticMarkupExtension

Sehr interessant fand ich auch die Möglichkeiten des Einsatzes der x:Static Markup Erweiterung, hier am Beispiel der Konfiguration. Die Konfiguration der Anwendung ist .NET konform in den Settings gespeichert und es wird ein Dialog angeboten, der jeden einzelnen Eintrag zum Ändern anbietet – etwa die URL zum SOAP Web Service des VCR.NET Recording Service. Im Beispiel wird der DataContext des Dialogs direkt an diese Einstellungen gebunden (DataContext=“{x:Static app:Properties.Settings.Default}“). Die einzelnen Formularelemente binden sich dann relativ an die Einzeleintragungen (Text=“{Binding Path=ServerUri, Mode=TwoWay, UpdateSourceTrigger=Explicit}“), wobei ich aber bewußt die explizite Aktualisierung verwende, da bei einem Abbruch keine Veränderungen vorgenommen werden sollen. Das geht in der einfachen Implementierung nur teilweise, dazu gleich mehr.

config.jpg

Ergänzend sieht man im Programmcode des Dialogs, wie diese Aktualisierung auch auf einen Rutsch dynamisch vorgenommen wird, ohne dass jedes Formularelement explizit angesprochen werden muss. Konkret bedeutet das, dass ein neuer Konfigurationseintrag letztlich nur in der XAML mit einem Formularelement eingetragen werden muss um gepflegt zu werden: es ist kein zusätzlicher Programmcode notwendig.

So wie es implementiert ist, funktioniert es allerdings nicht wirklich: an einigen Konfigurationseinträgen hängen Prüfungen (ValidationRule) und nur wenn alle Prüfungen Erfolg melden, kann das Formular gespeichert werden. Bei einer Gesamtprüfung werden aber alle erfolgreichen Eingaben bereits in die Konfiguration übertragen und sind damit zumindest für die weitere Nutzung der Anwendung verändert – auf Platte gespeichert werden kann allerdings nur, wenn alles korrekt eingegeben wurde. Ich habe dem zumindest optisch Rechnung getragen, indem die Abbrechen Schaltfläche deaktiviert wird. Ist aber nur halbherzig, da man den Dialog immer noch über das Kreuzchen rechts oben schliessen kann. Wieder für eine produktive Lösung undenkbar, aber das ist hier erst einmal irrelevant.

Eine zweite Anwendung von x:Static findet man in der Anwendung selbst. Hier wird eine Auflistung (TextFilterTypes[] FilterTypes) aller Alternativen einer .NET Enum angeboten, die in einer Auswahlliste angezeigt werden soll (ItemsSource=“{x:Static app:App.FilterTypes}“). Eine Erweiterung um eine Alternative erfordert erst einmal nur die Veränderung der Enum Definition und die Oberfläche folgt dieser sofort. Dass die Beispielanwendung diese Altenativen über WPF Ressourcen auf Texte abbildet ist für das Prinzp ohne Bedeutung – auch wenn das natürlich heißt, dass man doch zumindest einen weiteren Eintrag in den Ressourcen ergänzen muss.

Viel Spaß

Jochen

Bookmark the permalink.

Schreibe einen Kommentar