Предполагается, что в ListBox может быть выбрано несколько элементов.Ниже логика будет удалена из пользовательского интерфейса.Кроме того, при необходимости можно добавить логику для удаления элементов из базы данных.
Ниже приводится исключение, когда привязки данных отличаются от источников данных.
Коллекция элементов не может быть изменена, когдаУстанавливается свойство DataSource
Источник данных указывает источник данных, в то время как привязки данных определяют, как связаны данные после их получения.Как правило, привязка данных происходит только во время инициализации пользовательского интерфейса и после этого не меняется.
Сам источник данных может меняться в течение срока действия элемента управления, но это происходит редко.
Здесь элементы источника данных изменяются.
На вашей фактической ошибке.Вы не можете установить DataSource и изменить свойство Items.Это не разрешеноПравильный способ справиться с этим - добавить элементы в ваш источник данных.Эта вставка в ваш источник данных заставит элемент управления автоматически обновлять список.Элемент управления ListBox использует DS для хранения данных, поэтому все изменения должны проходить через это.В редком случае, когда вам нужно будет иметь возможность редактировать элементы напрямую, вам придется покончить с DataSource и вручную заполнить коллекцию элементов.Это обновление для источника данных обычно не требуется.
Ниже приведен код для сброса источника данных
if(listBox1.SelectedItems != null)
{
// Assuming its List of string
var items = listBox1.DataSource as List<string>;
// Remove multiple selected items
var count = listBox1.SelectedItems.Count;
while(count != 0)
{
var selectedItem = listBox1.SelectedItems[count-1];
if(items.ContainsKey(selectedItem))
{
items.Remove(selectedItem);
}
count--;
}
listBox1.DataSource = null;
listBox1.Items.Clear();
listBox1.DataSource = items;
}
Оптимизированный подход для хранения источника данных и его изменения для непосредственного обновления источника данных.Используйте тип ObservableCollection
и обновите коллекцию для обновления пользовательского интерфейса.
public class NamesClass : DependencyObject
{
public ObservableCollection<string> Names {get; private set; }
public TestClass()
{
this.Names = new ObservableCollection<string>();
}
}
Теперь включите класс DependencyObject
в качестве источника данных и обновите коллекцию Names.