Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Serialisierung von RelayCommand (MVVM)
Kevin007
myCSharp.de - Member



Dabei seit:
Beiträge: 31

Themenstarter:

Serialisierung von RelayCommand (MVVM)

beantworten | zitieren | melden

Hallo zusammen,

zur Info:
ich habe ein dynamisches Menü geschrieben, indem der Benutzer sein Menü verändern kann. Das MainViewModel hat eine ObservableCollection<Item>.
Die Klasse Item besitzt die Eigenschaften:
Name (Typ string)
.
.
.
ItemCommand (Typ RelayCommand)

Bisher fülle ich die Collection mittels Code bei der Initialisierung.

Was ich möchte:
Speichern der Standardkonfiguration in der Settings-Datei. Speichern der aktuellen Konfiguration.

Meine Überlegungen:
Serialisieren des auszuführenden Methodennamens und späteres "suchen" der Methode => welche Möglichkeiten gibt es?
Serialisieren der gesamten Collection, wobei die Klasse RelayCommand eben nicht serialisierbar ist.

Frage:
Wie kann ich die Collection vom Typ Item serialisieren/speichern?
Welche Möglichkeiten fern der Serialisierung fällt euch ein?

Vielen Dank!

Grüße
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Hi,

speichere doch reine Tokens o.ä.. Eine Fabrik kann die dann in Items wandeln.
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Hi,

du kannst den den Command als nicht zu serialisieren kennzeichen (je nachdem welchen Serializer Du benutzt sieht das leider anders aus..). Wie Du schon sagtest, kannst Du Dir den Methodenname als string abspeichern, und den Funktionspointer beim deserialisieren oder im beim ersten Aufruf des Commands per Reflection wieder aufbauen.
private Nachricht | Beiträge des Benutzers
Kevin007
myCSharp.de - Member



Dabei seit:
Beiträge: 31

Themenstarter:

beantworten | zitieren | melden

Hi,
Zitat von witte
speichere doch reine Tokens o.ä.. Eine Fabrik kann die dann in Items wandeln.

Wie würde das etwas genauer aussehen?
Zitat von unconnected

du kannst den den Command als nicht zu serialisieren kennzeichen (je nachdem welchen Serializer Du benutzt sieht das leider anders aus..). Wie Du schon sagtest, kannst Du Dir den Methodenname als string abspeichern, und den Funktionspointer beim deserialisieren oder im beim ersten Aufruf des Commands per Reflection wieder aufbauen.

Meine ViewModels erben von der Basisklasse ViewModelBase die nicht serialisierbar ist.
Ich müsste dann eine Methode schreiben, die eine XML Datei mit den wichtigen Eigenschaften erstellt, u.a. auch den Methodennamen.

Probehalber möchte ich nun bei der Initialisierung des Item-Objekts gleich den Command erstellen:


public Item(string executeMethodName, Type type)
{
     MethodInfo methodInfo = type.GetMethod(executeMethodName);
     TestCommand = new RelayCommand(methodInfo.Invoke(this, null));
}
Fehler
Argument type "object" is not assignable to Parameter System.Action.

Ideen?
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von Kevin007
Ideen?

[Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
private Nachricht | Beiträge des Benutzers