2009-09-10 9 views
1

D'abord, j'ai Listbox et mis le DataSource à un MyObjectCollectionIListSource et ToString() avec DataSource

MyObjectCollection implémente l'interface IListSource Wich contient

de MyObject de MyObject a la méthode

public override string ToString() 
{ 
    return "test"; 
} 

Le Listbox affiche maintenant "test" pour chaque élément dans MyObjectCollection.

Mais si j'applique également l'interface IListSource à MyObject. La zone de liste affiche une chaîne vide. Comment réparer cela dans la classe "MyObject". Une solution de contournement est de le fixer dans l'événement Format Listbox, mais que tous les éléments de l'interface graphique doit mettre en œuvre cette solution de contournement:/

+0

BTW - est-ce winform, wpf, ou asp.net? Je ne peux pas reproduire en winform ... –

Répondre

1

En général, les choses devraient soit être des listes, ou doit être une entité pour la liaison. Si c'est une liste (IList ou IListSource) alors une grande partie de l'API de liaison de données supposera que vous voulez réellement (pour des scénarios de liaison simple, c'est-à-dire une ligne) l'élément premier de la sous-liste.

Je voudrais simplement changer de sorte que MyObjectn'a pas mettre en œuvre IListSource, mais encapsule il, exposant peut-être via une propriété Items. Vous pouvez également regarder si une coutume TypeConverter fonctionnerait (j'étudierai ...)

+0

Pour l'encapsuler, c'est le meilleur moyen pour moi. Peut-être que c'était trop facile;) Maintenant, je lie MyObject.ListProperty insteat de MyObject tout fonctionne bien. – Tarion