Laden...

UserControl vom Benutzer anpassen lassen und dann Einstellungen speichern

Erstellt von morbus85 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.794 Views
M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren
UserControl vom Benutzer anpassen lassen und dann Einstellungen speichern

Hallo zusammen,

ich habe ein kleines Problem. Irgendwie schaffe ich es nicht Objekte zu speichern, sprich ganze Klassen auf der Festplatte. Und zwar nicht im Projekt, sondern wärend des Runtimes.
Wenn ich z.B. ein WPF UserControl habe, welches des User so angepasst hat, wie es haben will, so möchte ich das komplette Objekt als datei abspeichern und wieder laden.
In Java geht es über die Reader Klassen (also BufferedReader und BufferedWriter und welche noch dazu gehören).
Wie geht es in C#?

2.298 Beiträge seit 2010
vor 13 Jahren

Such mal hier im Forum nach Serialisierung. 😃

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

1.130 Beiträge seit 2007
vor 13 Jahren

BinaryFormatter kann ganze klassen mitsamt abhängigkeiten in einen stream schreiben und wieder lesen.
das problem an der sache: man sollte es nicht auf gui-objekte anwenden.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

meinst etwas der Art Usereinstellungen speichern?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Such mal hier im Forum nach Serialisierung. 😃

Super, danke... vergisst man schnell so was, wenn man wenig mit sowas zutun hat. 😃

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

meinst etwas der Art
>
?

Ne ne, Serialisierung war schon richtig... 😃

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

Und im allgemeinen macht es keinen Sinn ein GUI Element (in dem Fall das WPF UserControl) zu speichern und wieder zu laden. Der ganze Kontext in dem das UserControl existiert geht ja verloren. Sinnvoller ist es die Daten zu speichern welches das Control visualisiert. Grad im WPF Bereich ist das ganze aber nochmal bissle anders als z.B. in Windows Forms, da du dem User ja die Möglichkeit geben kannst per Styles das Aussehen völlig unabhängig von der Funktionalität zu ändern. Da würde man dann einfach die angepasste XAML Datei laden um dem Control das entsprechende Aussehen zu geben.

Baka wa shinanakya naoranai.

Mein XING Profil.

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Aber die Daten, welche innerhalb der Class geladen wurden, sollten erhalten bleiben.

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo morbus85,

verwende einfach eine Klasse und binde diese Klasse an den DataContext des UserControls. Dann speicherst bzw. serialisierst du die Klasse. Das ist wohl die einfachste Möglichkeit. Das komplette UserControl zu serialisieren ist - wie die anderen schon sagten - keine gute Idee. Speicher nur Daten, die relevant sind. Was bringt es dir, wenn du das komplette UserControl abspeicherst?

Verwende die Forensuche. Da findest du reichlich Informationen.

zero_x

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Ja ich weiß, dass es etwas unschön ist eine ganze Klasse so zu speichern, aber evtl. ist es bei mir notwendig.
Ich überlege ob ich doch alle Informationen in ArrayList einpacke und dann einfach ne extra Klasse schreibe, die die Informationen an die richtigen Plätze verweist.....

Wenn so ein Code vvorhanden ist, wäre er nett 😃

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo,

Ja ich weiß, dass es etwas unschön ist eine ganze Klasse so zu speichern, aber evtl. ist es bei mir notwendig.
Ich überlege ob ich doch alle Informationen in ArrayList einpacke und dann einfach ne extra Klasse schreibe, die die Informationen an die richtigen Plätze verweist.....

Was ist denn der Grund wieso du es nicht so machen willst / kannst wie dir alle vorschlagen?

Wie bereits von den anderen gesagt ist es am einfachsten wenn du dir eine Klasse erstellst die die ganzen Einstellungen enthält.
Diese kannst du dann speichern (bzw. serialisieren) und wieder auslesen.

.Net hat schon das Konfigurationsmodell integriert mit dem man recht konfortable die Einstellungen speichern kann.
gfoidl hat dir bereits ein Beispiel dazu gepostet.
Hier noch ein Tutorial dazu: [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0

PS: Bitte beachte [Hinweis] Wie poste ich richtig?
Ein Blick in die Dokus / Forensuche hätte dir da sicherlich auch weitergeholfen

Gruss
Michael

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Eigentlich sind die Einstellungen Tools, die in ein StackPanel eingefügt werden um eine Dokumentationsvorlage zu erzeugen. (Darf ned so viel davon reden, da es ein Projekt innerhalb der Firma ist).
Die Tools bestehen eignentlich aus mehreren Klassen, die z.B. Kapitel oder Informationsblöcke darfstellen, die wiederrum bearbeitet werden können. Innerhalb dieser Klassen werden z.B. Objekte übergeben, die für die Kommunikation mit der DB verantwortlich sind. Mit Styles hat es nichts zutun.
Wenn ich jetzt innerhalb diesen StackPanels meine Informationsblöcke einfühge, die aus UserControls bestehen, will ich dass der User die gesammte Vorlage speichern und laden kann. Klar könnte ich eine Klasse ausarbeiten, die alles in ArrayLists verpackt und wieder auspackt, aber es wäre zu umständlich.

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

Die UserControls wo du lädst repräsentieren doch aber nur die Informationsblöcke dahinter (sollte es nicht so sein und die UserControls enthalten die Logik habt ihr softwaredesigntechnisch nen riesen Bock drin). Deshalb musst du diese speichern und laden und nicht die UserControls welche nur die grafische Darstellung sind.

Und vergiss am besten das Wort ArrayList - die Klasse ist seit Jahren schon obsolet in .Net. Da gibts die generischen Pendants zu.

Baka wa shinanakya naoranai.

Mein XING Profil.

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Ja ich weiß, doch das MVC Prinzip ist mir irgendwie noch nicht so rein gekommen. Es fällt mir schwer irgendwie GUI vom Model und vom Controll zu trennen.

Wieso ArrayList vergessen? Ich finde die verdammt praktisch. Genau wie in Java mit dem Vector.

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

es muss nicht MVP sein (bzw. MVVM als WPF Pendant dazu), es reicht auch so einfach darauf zu achten das die GUI wirklich nur die Daten anzeigt. Dann gibts auch keinerlei Probleme die Daten zu speichern und bei Bedarf wieder laden und anzeigen zu lassen. Weil, lange Rede kurzer Sinn - es gibt keine möglichkeit UIElemente zu speichern und wieder genauso herzustellen. Es ist für einfache Datenklassen problemlos möglich, und auch GUI Teile können als XAML serialisiert und wieder geladen werden, aber es ist nicht möglich eine GUI Klasse welche Daten hält ordentlich zu speichern und wieder herzustellen.

Und ja, es ist so praktisch eine untypisierte Liste zu haben wo man bei jedem Zugriff casten muss... Wie gesagt, es gibt die entsprechenden generischen Klassen dazu die verwendet werden sollten. ArrayList ist seit .Net 2.0 praktisch überflüssig.

Baka wa shinanakya naoranai.

Mein XING Profil.

5.657 Beiträge seit 2006
vor 13 Jahren

es gibt keine möglichkeit UIElemente zu speichern und wieder genauso herzustellen.

Wenn es wirklich um die Speicherung von UI-Elementen geht, ist doch der XAMLWriter / XAMLReader die beste Alternative, weil genau für den Einsatzzweck gemacht.

@morbus85

ArrayList ist deshalb veraltet, weil es seit Framework 2.0 die generischen Collections mit all ihren Vorteilen gibt, also z.B. List<T>.

Christian

Weeks of programming can save you hours of planning

6.862 Beiträge seit 2003
vor 13 Jahren

Wenn es wirklich um die Speicherung von UI-Elementen geht, ist doch der XAMLWriter / XAMLReader die beste Alternative, weil genau für den Einsatzzweck gemacht. Na, net so ganz. Man serialisiert ja die Beschreibung der GUI (das erwähn ich übrigens auch in dem Satz nach dem welchen du zitiert hast 😃), nicht die einzelnen Objekte mit ihren Werten und ihrer Identität. Und erst recht nicht noch zusätzliche Funktionalität welche vielleicht Code-behind liegt.

Baka wa shinanakya naoranai.

Mein XING Profil.

M
morbus85 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Ich weiß, dass es etwas nervt, aber die Werte jeden einzelnen Objektes sind auch wichtig. Man will so zusagen die GUI konservieren, so wie sie ist.

6.862 Beiträge seit 2003
vor 13 Jahren

Und genau das geht nicht. Trenn die GUI von den Daten und dann geht das auch.

Baka wa shinanakya naoranai.

Mein XING Profil.