WPF Evaluation: Die Datenquelle

WPF ist sehr flexibel, wenn es darum geht, Daten an Oberflächenelemente zu binden. Als Datenquelle für mein kleines Beispiel dient der SOAP Web Service des VCR.NET Recording Service (ich denke aber, dass die folgenden Überlegungen für WCF sehr ähnlich sein werden) und dabei vor allem der Abruf der vollständigen Programmzeitschrift für ein Geräteprofil. Ich verwende hier bewusst die gesamte Programmzeitschrift, da es genau die Aufgabe des Beispielprogramms sein soll, diese geeignet zu filtern.

Wenn man eine Anwendung an eine Web Service bindet, so werden eine Reihe von Proxy Klassen im Projekt erzeugt (Unterverzeichnis Web References). Im Beispiel liefert die entscheidende Methode (GetEPGData) ein Feld mit EPGEvent Instanzen. Die Einträge der Programmzeitschrift sind allerdings zur direkten Darstellung wenig geeignet, enthalten sie doch den Startzeitpunkt in GMT / UTC Notation und statt des Endzeitpunktes die Dauer in Sekunden.

Glücklicherweise werden alle Proxy Klassen als partiellen Klassen (partial class) angelegt, so dass es ein Einfaches ist, diese mit geeigneten Eigenschaften und Methoden zu ergänzen. Im Beispiel wird dies hier gezeigt. Die Klasse EPGEvent bietet nun einen einfachen Zugriff auf Start und Ende in der lokalen Zeitzone und einige Hilfseigenschaften, die zur Variation der Darstellung benötigt werden (etwa meldet IsCurrent ob die Sendung jetzt gerade läuft). Zusätzlich wurden die Klassen zur Programmierung von Aufzeichnungen erweitert. Zu einem Auftrag (VCRJob) können nun einfach neue Aufzeichnungen hinzugefügt werden und eine Aufzeichnung (VCRSchedule) erlaubt eine Pflege der Aufzeichnungsparameter (FirstStart als GMT / UTC und Duration in Minuten) elegant in der lokalen Zeitzone über Start- und Endzeitpunkt.

Interessanter Weise macht der Code in dieser Datei auch einen erheblichen Anteil am Gesamtcode und der Kommunikation mit VCR.NET aus. Für das Laden der Programmzeitschrift wurde ein asynchroner Mechanismus gewählt, der ideal zu den asynchronen dynamischen Werten von WPF (Binding.IsAsync) passt – dazu in einem anderen Artikel. Beim Erzeugen der ProgramGuide Hilfsklasse wird VCR.NET asynchron kontaktiert, ein Abruf der Werte ist erst möglich, wenn eine Antwort bereit steht. Da die Instanz der Hilfsklasse als WPF Ressource angelegt wird (auch dazu an anderer Stelle mehr) wird dieser Vorgang sehr früh beim Starten der Anwendung angeworfen und kann parallel zum Aufbau des Hauptfensters abgearbeitet werden.

Auf technische Details der Implementierung will ich hier nicht eingehen – Thema ist ja WPF. Erwähnt werden sollte allerdings eine wesentliche Unschönheit in dem vorhandenen Code: wenn die SOAP URL des Servers nicht stimmt, so passiert erst einmal gar nichts. Hier muss der Anwender über die Konfiguration eine korrekte Adresse eintragen und die Anwendung neu starten. Für eine produktive Anwendung ein Unding, aber für das Ziel dieser Evaluation völlig ausreichend.

So long

Jochen

Speichere in deinen Favoriten diesen permalink.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.