У меня ComboBox настроен следующим образом, где KVPList - это IList (из KeyValuePair, если это имеет значение):
comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;
Затем я установил привязку с SelectedValue, привязку к BindingSource (к DataSet). По какой-то причине поле со списком всегда оказывается пустым при отображении формы. Однако он правильно заполнен (значения IList отображаются нормально и могут быть выбраны).
Теперь я изо всех сил старался проследить, и, похоже, сначала правильно установлено SelectedValue при привязке, но затем где-то по пути он сбрасывается до null. Я тоже играл с порядком вызова, но безрезультатно.
Может ли кто-нибудь пролить свет на это или предложить обходной путь?
Для записи, в той же форме, у меня есть другой ComboBox в той же форме, с его SelectedValue, привязанным к тому же BindingSource. DataSource - это DataSet, а не IList, и он работает как шарм. Это может быть вариант сделать DataTable из IList, но это похоже на массу дополнительных накладных расходов; Я генерирую IList из перечисления.





Ой. Потратив на это полдня, я понял это. Это была полная ошибка с моей стороны.
KVPList был установлен на IList из KeyValuePair<short,string>, но поле данных имеет тип int. По сути, привязка данных сработает и установит свойство SelectedValue. Затем срабатывают привязки DisplayMember и ValueMember, снова проверяя SelectedValue. Поскольку ValueMember относится к типу short, а не int, он не найдет совпадения и, следовательно, установит для него значение null.
Что-то забавное, должно быть, происходит с боксом и распаковкой, но я слишком устал, чтобы понять почему прямо сейчас.
Я оставлю этот вопрос на тот случай, если кто-то еще столкнется с той же проблемой. Трудно отследить, потому что я ожидал, что он либо попытается привести, либо выбросит исключение, а не молча обнулится. В конце концов, short и int являются типами значений, и в последний раз я проверял, что (int)10 == (short)10 верен.
Спасибо за Ваш ответ. Я столкнулся с той же проблемой. Моим типом свойства зависимости был IList <Foo>, который был привязан к ILIst <IFoo>. (Foo реализует IFoo). Казалось, все работает, за исключением того, что значение свойства зависимости всегда было нулевым. Без исключений или отладки. Когда я изменил тип свойства зависимости на IList <IFoo>, все заработало.