2010-09-20 9 views
1

J'ai les classes/interfaces suivantes. J'obtiens une ArgumentException en disant "Complex DataBinding accepte en tant que source de données soit IList soit IListSource". Mais, je le mets à un IList. Qu'est-ce que je fais mal?Pourquoi est-ce que je reçois une exception lors de la liaison IList à une zone de liste déroulante?

public interface IOriginList : IList<IOriginEntry> 
{ 
    ... 
} 

public class OriginList : Interfaces.IOriginList 
{ 
    ... 
} 

// Binding code 
IList<IOriginEntry> originList = new OriginList(); 
cboOrigin.DataSource = originList; 
+0

IList, pas IList <> –

Répondre

1

Je ne crois pas que vous pouvez lier à un IList générique <>, seule une IList non générique.

Essayez ceci:

cboOrigin.DataSource = originList.ToArray(); 


* Modifier *

En fait, le problème est peut-être que le IList est d'un type d'interface? Nulle part IOriginEntry n'est défini sur un objet concret et vous ne pouvez pas lier l'élément de zone de liste déroulante à une interface.

Vous pouvez également essayer ceci:

public class OriginEntry { 
    public string Name {get; set;} 
} 

public interface IOriginList : IList<OriginEntry> { 
    ... 
} 

public class OriginList : Interfaces.IOriginList { 
    ... 
} 

// Binding code 
IList<IOriginEntry> originList = new OriginList(); 
cboOrigin.DataBindings.Add(new Binding("SelectedValue", originList, "Name")); 
+0

ToArray() est un peu lourd, juste jeter à IList. –

+0

ToArray n'est pas membre de IList. Si j'essaie de lancer vers un IList non générique, j'obtiens une exception InvalidCastException. – bsh152s

+0

Cela peut fonctionner mais je n'ai aucun contrôle sur les interfaces/classes IOriginList/OriginList/IOriginEntry/OriginEntry (elles proviennent d'une tierce partie). J'espérais que je n'aurais pas à parcourir la liste et ajouter les éléments manuellement. – bsh152s

Questions connexes