Как удалить несколько выбранных элементов из WPF ListView? - PullRequest
3 голосов
/ 19 января 2012

У меня есть WPF ListView со многими предметами. Когда я выбираю несколько из них, я хочу иметь возможность удалить их с помощью кнопки. Проблема в том, что я могу удалить ОДИН элемент из ListView, но затем, когда я повторяюсь во второй раз, я получаю:

Коллекция была изменена; операция перечисления может не выполняться.

Ошибка из-за последнего удаления, изменившего ItemSource этого ListView. Каков наилучший способ сделать это? Я попытался сделать копию выбранных элементов, но я не знаю, какой тип использовать.

Ответы [ 4 ]

3 голосов
/ 19 января 2012

Сохраните коллекцию выбранных элементов в локальной переменной, которая не изменится, после чего вы можете выполнить итерацию по ней без проблем.

, например

var selected = lv.SelectedItems.Cast<Object>().ToArray();
foreach (var item in selected) lv.Items.Remove(item); // or whereever you need to remove them...

(Cast<T> и ToArray являются методами расширения )

1 голос
/ 19 января 2012

Мой предпочтительный способ сделать это - использовать диспетчер:

System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() =>
         {
             my_Collection.Remove(item);
         }));
1 голос
/ 19 января 2012

Вы можете управлять списком индексов для удаления, а затем удалить диапазон.

Какой тип источника вашей коллекции связан с вашим ListView?

0 голосов
/ 15 февраля 2019

Если ваш ListView связан с коллекцией пользовательского ссылочного типа, я думаю, что это предпочтительный и самый простой способ

YorCustomType[] selected = new YorCustomType[YourListView.SelectedItems.Count];
YourListView.SelectedItems.CopyTo(selected, 0);
foreach (YorCustomType reference in selected)
{
    YourSourceCollections.Remove(reference);
}

Это не зависит от Linq

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