Я сделал это с помощью следующего кода, но он имеет исключение, когда выбрано более одного элемента:
Индекс был вне диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс
List<ListViewItem> ListViewItems = new List<ListViewItem>();
foreach (int index in listView1.SelectedIndices)
{
ListViewItem SelectedListViewItem = listView1.Items[index]; // exception
ListViewItems.RemoveAt(index);
}
…
void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = ListViewItems[e.ItemIndex];
}
Всякий раз, когда вы удалите пункт (ы) из коллекции, всегда итерацию с самого большого индекса наименьшим индексом, например:
for (int index = listView1.SelectedIndices.Count - 1; i >= 0; i--)
{
…
}
Это происходит потому, что каждый раз, когда вы удаляете элемент в коллекции, индекс изменяется, если вы не перебираете от самого большого к наименьшему индексу.
проверить это: http://stackoverflow.com/questions/444727/loop-through-all-elements-in-listview-in-virtual-mode –