2010-03-30 13 views
1

J'essaie de lier un dictionnaire en tant que DataSource à un ListBox. La solution dans How to bind a dicationary to a ListBox in winforms ne fonctionnera pas pour moi parce que mon dictionnaire est une variable de niveau de classe et pas une variable de niveau de méthode, donc je ne peux pas utiliser var. Lorsque vous mettez une variable de niveau classe dans un nouveau BindingSource (...) avec null comme second argument, j'obtiens une exception ArgumentNull. Comment lier un dictionnaire de niveau classe en tant que source de données pour une zone de liste?Dictionnaire C# en tant que ListBox.DataSource

Je n'aime pas la liste < KeyValuePair chaîne <, string>> travail autour becuase Où (...) et le premier (...) sont laids, complexe et confus par rapport à TryGetValue (.. .) et d'autres fonctionnalités du dictionnaire.

namespace myNamespace 
{ 
    public partial class myForm : Form 
    { 
     private Dictionary<string,string> myDictionay; 
     public myForm() 
     { 
      InitializeComponent(); 
      myDictionay= new Dictionary<string, string>(); 
      listBox1.DataSource = new BindingSource(myDictionay,null); // ArguemtNull exception 
     } 
    } 
}   
+0

Etes-vous sûr que le dictionnaire de votre objet n'est pas nul? Nous pourrions avoir besoin de plus de code –

+0

J'instancie le dictionnaire une ligne au-dessus de l'assignation DataSource - le dictionnaire n'est pas nul. –

Répondre

3

Je ne pense pas que le fait que ce soit une variable membre fera une différence. Pour moi, il semble que la différence importante entre l'exemple de Matt Hamilton et le vôtre est que son dictionnaire contient des éléments, et pas le vôtre. Votre dictionnaire n'est pas nul, mais si le constructeur BindingSource essaie d'obtenir myDictionary.Values ​​[0], sera être nul. Essayez de mettre une entrée dans le dictionnaire, et voyez si vous avez un comportement différent.

+0

Rats, pardonnez-moi de supposer que les bibliothèques système vérifieraient le cas vide ... –

0

de la même manière, mais à

listBox1.DataSource = new BindingSource(choices, null); 

mis smthing comme

listBox1.DataSource = new BindingSource(YourClass.YourDict, null);