Oberfläche speichern

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von wolfi_bayern.

    Oberfläche speichern

    Hallo zusammen!

    Ich häng hier an einem Problem bezüglich speichern der Oberfläche. In meiner UWP-App kann der Nutzer vordefinierte Usercontrols hinzufügen, deren Eigenschaften bearbeiten und per Maus auf der Oberfläche verschieben.
    Die Seite beinhaltet ein Canvas, in deren .Children-Collection das hinzuzufügende Control eingefügt wird. Es gibt zwei Modes: Editmode und Workmode. Im Editmode können die Controls bearbeitet werden, im Workmode holden die Controls daten.

    Wie lässt sich nun die Oberfläche speichern? Das heißt jedes Control irgendwohin in ein File um beim nächsten Start der App die Controls wieder zu haben.

    Ich würde das Speichern beim umschalten zwischen Edit- und Workmode durchführen; alle controls in Canvas.Children durchlaufen und das Objekt serialisiert in eine Liste packen und diese Liste am ende in ein File speichern.

    Natürlich bekomm ich einen Fehler, da ein in Verwendung befindliches Control sich nicht serialisieren lässt. Wie würde man hier vorgehen um trotzdem alle eigenschaften abzuspeichern?

    Beim wiederherstellen/neustart der App würde die die Datensätze aus dem File holen und Element für Element einfach neu anlegen und die aus der Datei gelesenen Eigenschaften setzen...

    Hat hier jemand einen ansatz?

    Grüße
    Der Beitrag wurde aus 100% wiederverwendbaren Elektronen erstellt!
    Hallo @wolfi_bayern

    Du solltest hier anders rum denken. Nicht das/die Control(s) speichern sondern die Daten.

    Das problem dabei ein Control zu serialisieren ist das du auch Eigenschaften mit Serialisierst welche du gar nicht speichern möchtest.

    Du speicherst Daten.
    Man kann im Edit-Mode gewisse Dinge anpassen, was genau man anpassen kann weist du als Entwickler ja, und genau das speicherst du ab.

    Beispiel: Angenommen ich habe eine App in welcher ich schlicht einer ListBox Buttons hinzufügen kann, diese Button kann der User selbst Beschriften und deren größe ändern.
    Gut, was habe ich: Width, Height und Content.

    Also mach ich eine Klasse welche mir diese Eigenschaften hält und füge der Auflistung an welche die Listbox gebunden ist diese Klasseninstanz hinzu.
    Beim speichern serialisiere ich die Auflistung und beim laden Deserialisiere ich die Auflistung und die ListBox wird wieder alles wie gewünscht automatisch durch das Binding übernehmen.

    Der angenehme Nebeneffekt: Wenn du deine App abänderst, umgestalltest oder plötzlich überhaupt völlig andere Controls haben möchtest musst du am Code nichts umbauen da ja alles über Binding läuft.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo @Nofear23m!

    Danke Dir für Deinen Tipp. Ich hatte schon mal in diese richtung gedacht, bin aber davon abgekommen, weil ich mir dachte dass es einfacher wäre einfach das komplette Control mit allen properties einfach zu speichern.

    Ich hab jetzt Deinen Vorschlag umgesetzt und eine Speicherklasse erstellt. Diese wird als Liste initialisiert und mit den Werten der von den Usern hinzugefügten Controls befüllt. Per JSON serialisierung/deserialisierung schreib ich alles in ein File und fertig.

    Funktioniert.

    Danke und Grüße

    PS.: Wo kann ich "erledigt" einstellen?
    Der Beitrag wurde aus 100% wiederverwendbaren Elektronen erstellt!