DialogPage - String-Array nicht persistent

8

Ich entwickle eine Erweiterung für Visual Studio.

Dort habe ich eine Optionsseite:

%Vor%

Die Eigenschaft Bar funktioniert einwandfrei und ist dauerhaft.

Die Eigenschaft Foos funktioniert auch (es gibt sogar ein nettes Popup auf der Optionen-Seite, wo Sie eine Zeichenkette pro Zeile eingeben können), was bedeutet, dass ich sie einstellen und auch in meiner Nebenstelle verwenden kann, aber nicht in die Registrierung / Speicherung geschrieben. Wenn ich VS schließe und es wieder öffne, ist es immer leer.

Zitat von MSDN :

  

Die Standardimplementierung von DialogPage unterstützt Eigenschaften mit geeigneten Konvertern oder Strukturen oder Arrays, die in Eigenschaften mit entsprechenden Konvertern erweitert werden können. Eine Liste der Konverter finden Sie im System.ComponentModel-Namespace. Die Erweiterbarkeitsamples von Visual Studio verwalten die Eigenschaften int, string und System.Drawing.Size.

In meinem Verständnis verwende ich gültige Komponenten aus dem Namensraum System.ComponentModel .

Was mache ich falsch? Muss ich Arrays irgendwie anders behandeln?

    
OschtärEi 18.06.2014, 17:00
quelle

2 Antworten

6

Sie müssen einen benutzerdefinierten TypeConverter für Ihre Foos-Eigenschaft implementieren und zuordnen.

Es gibt keinen Aktienkonverter, der dieses Szenario abdeckt, denn wenn Sie ein Array von Strings in einen String konvertieren, müssen Sie eine Art Trennzeichen haben, damit Sie das Array aus dem String rekonstruieren können. Und das wird abhängig von der individuellen Anwendung des Programmierers variieren. Daher die Notwendigkeit für einen benutzerdefinierten TypeConverter.

Sie müssen also eine neue Klasse von System.ComponentModel.TypeConverter ableiten und diese dann mit Ihrer Foos-Eigenschaft verknüpfen. Zum Beispiel:

%Vor%

Eine schnelle Suche im Internet sollte einige Beispiele aufzeigen, damit Sie in die richtige Richtung zeigen.

Die DialogPage.SaveSettingsToStorage durchläuft eine Auflistung der PropertyDescriptors der Seite, ruft den Converter jeder Eigenschaft ab, ruft CanConvertTo und CanConvertFrom auf, um sicherzustellen, dass die Eigenschaft in eine Zeichenfolge konvertiert werden kann, und ruft ConvertToInvariantString des Konverters auf, um die Eigenschaft in der Registrierung beizubehalten Wert.

Umgekehrt durchläuft die DialogPage.LoadSettingsfromStorage die Registrierungswerte, findet den PropertyDescriptor, der mit der Eigenschaft auf der DialogPage übereinstimmt, ruft den Coverter ab und ruft dann CanCovertFrom auf, um sicherzustellen, dass die Zeichenfolge wieder in diesen bestimmten Eigenschaftstyp konvertiert werden kann ConvertFromIvariantString und weist den Wert dann der Eigenschaft zurück.

    
Ed Dore 29.06.2014, 05:03
quelle
5

Ed Dore hat die richtige Antwort gegeben (Danke).

Als Beispiel hier meine benutzerdefinierte TypeConverter :

%Vor%     
OschtärEi 30.06.2014 09:47
quelle