Kann ich die Standardsammlung Editor machen und / oder eine benutzerdefinierte UI-Editor, um das Set-Accessor für eine Eigenschaft aufrufen?

StackOverflow https://stackoverflow.com/questions/1209452

Frage

Ich schreibe eine Plug-in für eine Anwendung, wo ich eine benutzerdefinierte Klasse, die die nativen Objekte des Programms Attribut. Die API ermöglicht es mir Schlüssel Strings direkt zu und von den Objekten in der nativen Datei zu lesen und zu schreiben. Also lieber dann das Lesen und Schreiben auf private Felder in den Get und Set-Accessoren jeder Eigenschaft Ich lese und schreibe diese Benutzer Strings und von den nativen Objekte im Programm.

Der Benutzer greift auf diese Eigenschaften durch eine Property Kontrolle. Bisher ist das alles funktioniert gut mit einfachen Eigenschaften außer jetzt ich eine benutzerdefinierte Sammlung speichern müssen ( FloorCollection ) eines benutzerdefinierten Objekttyp ( Etage ).

Also ich habe eine Eigenschaft Setup mit XmlSerializer . Die GET-Accessor liest die Benutzer Zeichenfolge aus den nativen Objekte, und dann wird der String in eine Instanz von FloorCollection deserialisiert. Der Accessor SET macht genau das Gegenteil, indem sie in einer Instanz eines Lesen FloorCollection , und es dem Benutzer Zeichenfolge serialisiert.

Hier ist, was mein Eigentum wie folgt aussieht:

public FloorCollection Floors
{
    get 
    {
        string oldString = this.GetBaseObjUserString("CPFloors");
        if (oldString == null) return null;

        XmlSerializer serializer = new XmlSerializer(typeof(FloorCollection));
        StringReader strReader = new StringReader(oldString);

        FloorCollection newCollection =                 
        (FloorCollection)serializer.Deserialize(strReader);
        return newCollection;
    }

    set 
    {
        FloorCollection newCol = value;

        if (newCol == null) return;

        //serializes new collection
        XmlSerializer serializer = new XmlSerializer(typeof(FloorCollection));
        StringWriter sw = new StringWriter();

        serializer.Serialize(sw, newCol);

        string newString = sw.ToString();

        this.SetBaseObjUserString("CPFloors", newString);
    }
}

Ich kann diese Sammlung Eigenschaft öffnen durch meine PropertGrid in der Standardsammlung Editor. Jedoch bearbeitet die Standardsammlung Editor nur die Sammlung an der Referenz durch den GET-Accessor vorgesehen, eher dann den SET-Accessor rief es zurück auf das Objekt zu speichern. So kann ich die Sammlung im Standard-Editor bearbeiten, aber wenn ich schließen und wieder öffnen Sie den Editor der Sammlung wird nicht geändert haben, da die SET-Accessor nie die Sammlung genannt wird serialisiert zurück an den Benutzer Zeichenfolge im nativen Objekt.

Kann ich die Standardsammlung Editor ändern Sie den set-Accessor der Eigenschaft zu nennen? mit dem Eigenschaftssatz Accessor Wenn ich Setup eine benutzerdefinierte UITypeEditor für die Eigenschaft ist es eine Möglichkeit, es wieder auf die Eigenschaft haben, zu retten? Oder gibt es eine andere Möglichkeit, Code zu erzwingen, dass die Sammlung Eigenschaft wird Zugriff auf die Eigenschaft von Wert GET und SET eher dann verweisen?

War es hilfreich?

Lösung

Ich glaube nicht, das XML-Serializer jemals die set Accessor für eine Sammlung nennen. Stattdessen wird es nur die Add-Methode der es Sammlung Instanz aufrufen aus dem get Accessor abruft.

Ich glaube, Sie werden Ihre Sammlung Art der Add außer Kraft gesetzt haben müssen und Methoden entfernen und solche, die Sammlung zu ändern, und dann die modifizierte Sammlung serialisiert zurück in die Benutzereigenschaft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top