С# Update, связанный с общим списком
У меня есть сводка в моей форме, которая связана с общим списком такой строки:
private List<string> mAllianceList = new List<string>();
private void FillAllianceList()
{
// Add alliance name to member alliance list
foreach (Village alliance in alliances)
{
mAllianceList.Add(alliance.AllianceName);
}
// Bind alliance combobox to alliance list
this.cboAlliances.DataSource = mAllianceList;
}
Пользователь может добавлять или удалять элементы в поле со списком.
Я читал в другом месте, что, просто добавляя или удаляя элемент в общем списке, содержимое выпадающего списка должно автоматически обновляться; то же самое должно произойти, если я использую Sort() на нем.
Но по какой-то причине я не могу выполнить эту работу. Я вижу, что свойство DataSource combobox правильно обновляется по мере добавления/удаления/сортировки элементов, но содержимое, отображаемое в поле со списком, не относится к свойству DataSource.
Я, конечно, что-то пропустил или что-то не так.
Спасибо заранее!
EDIT:
Ответ, который я выбрал, решил проблему для добавления и удаления, но объект BindingList не может быть отсортирован, и это необходимо для меня. Я нашел решение, в котором пользовательский класс создается путем наследования BindingList и добавления возможностей сортировки, но я хотел бы знать, есть ли более легкое решение в моем случае.
Любые предложения о том, как легко решить эту проблему?
Ответы
Ответ 1
Самый простой способ - просто использовать BindingList так:
private List<string> mAllianceList = new List<string>();
private BindingList<string> bindingList;
private void FillAllianceList()
{
// Add alliance name to member alliance list
foreach (Village alliance in alliances)
{
mAllianceList.Add(alliance.AllianceName);
}
bindingList = new BindingList<string>(mAllianceList);
// Bind alliance combobox to alliance list
this.cboAlliances.DataSource = bindingList;
}
Затем, отсюда, просто примените список привязки, чтобы добавлять и удалять элементы оттуда. Это удалит его как из списка, так и из ComboBox.
EDIT: Чтобы ответить на вопрос о сортировке, я думаю, что самый простой (но, возможно, "взломанный" способ сделать это будет примерно таким:
mAllianceList.Sort();
bindingList = new BindingList<string>(mAllianceList);
this.cboAlliances.DataSource = bindingList;
Таким образом, после сортировки вы создаете новый список привязки и reset источник данных. Возможно, есть более элегантный способ сделать это, однако это должно сработать.