Comment créer une propriété de contrôle utilisateur de type Collection & lt; MyClass & gt; modifiable dans le concepteur de formulaires?

Aujourd'hui, au travail, je suis tombé sur un problème qui a été me rend fou.

Fondamentalement, mon objectif est: est-ce

J'ai un UserControl1avec un champ de type Collection<Class1> et une propriété correspondante Collection<Class1> Prop. Comme ceci:

public class UserControl1 : UserControl
{
    private Collection<Class1> field = null;
    //later changed to:
    //private Collection<Class1> field = new Collection<Class1>();
    [Category("Data")]
    [DefaultValue(null)]
    [Description("asdf")]
    public Collection<Class1> prop
    {
        get { return field; }
        set { field = value; }
    }
}
//later added:
//[Serializable]
public class Class1
{
    private bool booltest; public bool Booltest { get...set...}
    private int inttest; public int Inttest { get...set...}
}

Si vous savez déjà ce que j'ai foiré: pas besoin de lire le reste. je vais vous décrire exactement ce que j'ai fait.

Maintenant j'ai mis le UserControl sur aléatoires de la Forme et de changer le Prop de la propriété. Générique de la Collection "l'Éditeur" s'affiche, comme celui utilisé pour les colonnes et les groupes dans un contrôle listview. Je peux entrer des données comme prévu. Cependant, lorsque je clique sur OK, les données ont disparu.

Il m'a fallu plus d'heure pour comprendre que j'ai fait pour instancier mon domaine: private Collection<MyClass> field = new Collection<MyClass>();. Très bon, seulement que le concepteur est entré superspazzing mode. Une cascade de cauchemar message d'erreur qui peut être réduite à: "Vous devez mettre [Serializable] avant votre Class1." Après avoir fait cela je pourrais mettre mon UserControl1 sur le Formulaire à nouveau.

Mais qui ne fonctionne qu'une fois. Lors de l'ouverture de la designer de la Forme où je utiliser le UserControl1 après l'édition de quelque chose, il me donne une erreur:

Object of type 'userctltest.Class1[]' cannot be converted to type 'userctltest.Class1[]'.

Bien. La Liste des Erreurs, dit:

Warning: ResX file Object of type 'userctltest.Class1[]' cannot be converted to type 'userctltest.Class1[]'. Line 134, position 5. cannot be parsed.

Le concepteur tente d'extraire de la Propriété des données à partir du fichier resx. En supprimant le fichier resx "résout" que exactement une fois.

Le Formulaire peut maintenant être affiché à nouveau, avec mon UserControl1. La Collection de propriété est modifiable, et il est sauvé. Il fonctionne réellement. Une fois que. Chaque fois que je change quelque chose et puis essayez d'ouvrir le Formulaire de créateurs encore une fois, l'erreur ci-dessus se produit à nouveau. Je peux supprimer le fichier resx, mais ce sera bien sûr également supprimer mes données.

Ressources pertinentes qui m'ont aidé jusqu'à présent (parmi une tonne de pas si utile les résultats de la recherche):

http://www.codeproject.com/Answers/190675/Usercontrol-with-custom-class-property#answer1
http://www.codeproject.com/KB/cs/propertyeditor.aspx
http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=94
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

(J'ai aussi essayé la mise en œuvre de ISerializable et dominante GetObjectData avec

{ info.AddValue("testbool", testbool); info.AddValue("testint", testint); }

n'a pas aidé non plus (j'ai aussi essayé la propriété des noms au lieu des noms de champ))

Désolé pour l'écriture de cette comme un mauvais roman d'horreur, btw.

source d'informationauteur dialer