Laden...

Serialisierung von RelayCommand (MVVM)

Erstellt von Kevin007 vor 10 Jahren Letzter Beitrag vor 10 Jahren 774 Views
Thema geschlossen
K
Kevin007 Themenstarter:in
30 Beiträge seit 2012
vor 10 Jahren
Serialisierung von RelayCommand (MVVM)

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

W
955 Beiträge seit 2010
vor 10 Jahren

Hi,

speichere doch reine Tokens o.ä.. Eine Fabrik kann die dann in Items wandeln.

849 Beiträge seit 2006
vor 10 Jahren

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.

K
Kevin007 Themenstarter:in
30 Beiträge seit 2012
vor 10 Jahren

Hi,

speichere doch reine Tokens o.ä.. Eine Fabrik kann die dann in Items wandeln.

Wie würde das etwas genauer aussehen?

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));
}

Fehlermeldung:
Argument type "object" is not assignable to Parameter System.Action.

Ideen?

U
1.688 Beiträge seit 2007
vor 10 Jahren
Thema geschlossen