Словарь C # как ListBox.DataSource - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь привязать словарь в качестве источника данных к ListBox. Решение в Как связать словарь с ListBox в winforms не будет работать для меня, потому что мой словарь является переменной уровня класса, а не переменной уровня метода, поэтому я не могу использовать var. Когда вы помещаете переменную уровня класса в новый BindingSource (...) с нулевым значением в качестве второго аргумента, я получаю исключение ArgumentNull.

Как связать словарь уровня класса как источник данных для списка?

Мне не нравится обходной путь List >, потому что Where (...) и First (...) безобразны, сложны и запутаны по сравнению с TryGetValue (...) и другие функции словаря.

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
        }
    }
}          

Ответы [ 2 ]

3 голосов
/ 30 марта 2010

Я не думаю, что факт, что это переменная-член, будет иметь значение. Мне кажется, что важное различие между примером Мэтта Гамильтона и вашим в том, что в его словаре есть элементы, а в вашем - нет. Ваш словарь не является нулевым, но если конструктор BindingSource попытается получить myDictionary.Values ​​[0], то будет нулевым.

Попробуйте добавить запись в словарь и посмотрите, не изменилось ли поведение.

0 голосов
/ 30 марта 2010

так же, но на

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

положить что-то вроде

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