Привязать ComboBox к двум спискам в C # - PullRequest
0 голосов
/ 17 августа 2011

У меня есть два списка.Первый из них жестко запрограммирован и его содержание никогда не меняется.Второй может быть отредактирован пользователем для добавления, изменения и удаления элементов:

public List<Item> DefaultItems = new List<Item>();
public BindingList<Item> UserItems = new BindingList<Item>();
...
MyTable.DataSource = UserItems;

Я хотел бы связать содержимое обоих списков, один за другим, с ComboBox и автоматически обновлять его припользователь редактирует список UserItems.

Первая часть, которую я легко могу решить с помощью чего-то вроде:

public List<Items> AllItems
{
    get
    {
        List<Item> Items = new List<Item>();
        foreach (Item I in DefaultItems) Items.Add(I);
        foreach (Item I in UserItems) Items.Add(I);
        return Items;
    }
}
...
MyComboBox.DataSource = AllItems;

Проблема заключается в том, что при изменении UserItems не появляется уведомление об изменении AllItems, поэтомусодержимое поля со списком остается прежним.

Затем я добавил событие, которое генерируется при изменении UserItems.Теперь моя проблема в том, как заставить ComboBox обновиться.Выполнение следующих действий:

MyComboBox.DataSource = null;
MyComboBox.DataSource = AllItems;

приводит к тому, что выбранный элемент становится нулевым, а выбранный индекс становится равным -1, что я затем должен обработать в своем коде (временно запомнить текущий элемент, восстановить его впоследствии и т. Д.).Все становится очень грязным, и я уверен, что есть умный способ решить эту проблему.

спасибо, Энди

ОБНОВЛЕНИЕ: Я не хотел добавлять еще код и сложность только для этого в виде сторонней сборки, поэтому я просто продолжил свойгрязный подход.Благодаря.

1 Ответ

2 голосов
/ 17 августа 2011

Вам необходимо использовать коллекцию, которая будет уведомлять пользовательский интерфейс об изменении коллекции.

Вы можете использовать предоставленный класс .NET BindingList или, если хотитечтобы попробовать что-то другое, вы можете скачать класс BindingListView, который обернет ваши существующие коллекции и предоставит пользовательскому интерфейсу необходимое уведомление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...