Dynamischer Dateninspektor in WPF
Über dieses Projekt
Dies ist eine WPF Desktop Applikation zur Erstellung und Bearbeitung von großen Itemkollektionen für Rollenspiele, nach dem MVVC Pattern. Da Rollenspiele sehr schnell eine große Menge von modellierten Gegenständen erfordern (meist mehrere hundert oder sogar tausende), kommt man schnell an den Punkt wo es nichtmehr praktikabel ist jedes Item als einzelne Json Datei oder einzelne Klasse zu behandeln. Dieses Projekt baut auf einem Plattformunabhängigen RPG Framework auf, dass ich als Library für meine eigene Spieleentwicklung entwarf.
Der Hauptfokus der Applikation lag auf der Darstellung und Bearbeitung der voll modularisierten Item Klassen. Das Grundframework unterstützt außerdem dynamische Berechnungen von numerischen Wertungen für Items, damit Items automatisch in ihrer Nützlichkeit geranked werden können. Diese automatischen Berechnungen werden auch im Inspektor angezeigt und passen sich in Echtzeit an die eingegebenen Werte an. Um eine große Breite an Klassen im Inspektor darstellbar zu machen ohne sie explizit als ViewModel modellieren zu müssen, werden ViewModels automatisch anhand der Attribute der Klassen generiert. Die Code Generierung erfolgt mittels eines T4Template Files.
Hauptfunktionen
- Datadriven Design: Alle für das Tool relevanten Daten werden aus der gegebenen C# Domäne automatisiert extrahiert. Keine separaten Dateien außer der gegebenen C# Domäne müssen geändert werden, dies reduziert den Aufwand bei Codeänderungen enorm.
- Responsive Design: Die dynamischen readonly Felder werden in Echtzeit berechnet und angezeigt, wenn der Nutzer für die Berechnung relevante Felder ändert.

Der Inspektor(rechts) erstellt durch Analyse der Klasse des Ausgewählten Projektes eine Übersicht über alle Felder der Klasse. Dies geschieht rekursiv, sodass auch mehrfach geschachtelte Klassen im Inspektor verändert werden können.

Auf Grundlage der geladenen C# Domäne werden dynamisch alle validen Klassen, die einem Feld hinzugefügt werden können der Suchmaske hinzugefügt. Der Nutzer kann diese in Echtzeit über die Suchleiste Filtern und eine Instanz der ausgewählten Klasse in das Feld instanziieren.

Die Attribute über den Feldern steuern die Darstellung im Inspektor. Die Attribute werden mittels Reflections ausgewertet und danach automatisiert in WPF Elemente konvertiert.
Herausforderungen
Eine der größten Herausforderungen war die dynamische Inspektor Gestaltung. Vor allem da durch die dynamisch berechneten readonly Felder, eine relativ komplexe dynamische Verkettung von Databindings notwendig war. Ich löste dieses Problem indem ich dynamisch ViewModels und Views für jede Klasse mit Hilfe von T4 Templates beim Laden der C# Domäne generiere. Dies erlaubte es mir mit statischen ViewModels und Views zu arbeiten ohne diese händisch für jede Klasse schreiben zu müssen.
Erkenntnisse
Es war ein interessantes Problem den dynamischen Inspektor zu Implementieren. Ich habe einiges über die Limitierungen von WPF und die Anwendung von T4 Templates gelernt, auch wenn die Anwendung der Templates in diesem Projekt sehr naiv war und ich Sie in zukünftigen Projekten weniger monolithisch designen würde.