ListView <-> ImageList не будет синхронизироваться
Я использую ListView для загрузки и отображения миниатюр для файлов изображений. "Имя" или ключ, который я использую для каждого ListViewItem - это полное имя файла.
Я также создал ImageList, который загружает миниатюры этих файлов, используя тот же ключ. Я назначил этот ImageList как свойство "SmallImageList" ListView.
Когда я добавляю и удаляю файлы, я добавляю и удаляю их по ключам из коллекций ListView.Items и ImageList.Images.
Все это прекрасно работает при загрузке многих изображений. Однако, когда я пытаюсь удалить данный ключ, элемент управления ListView больше не отображает эскизы должным образом.
До и после удаления элемента:
Когда во время отладки я анализирую оба набора коллекций в памяти, ключи выстраиваются идеально.
Используемый код:
// Add the images from an array of paths
foreach (string xFile in files)
{
thumbnails_imageList.Images.Add(xFile, images[xFile]);
files_lst.Items.Add(xFile, Path.GetFileNameWithoutExtension(xFile), xFile);
}
// Delete the selected key(s)
foreach (ListViewItem xItem in files_lst.SelectedItems)
{
files_lst.Items.Remove(xItem);
thumbnails_imageList.Images.RemoveByKey(xItem.Name);
}
1 ответ
Что происходит ясно, если у вас есть ListViewItem
привязан к индексу изображения 5
и вы удаляете изображение в положении 4
, 5 сдвигается до 4, и элемент сохраняет ссылку на 5
так не показывает ни одного изображения.
Я думаю, что вы не должны удалять изображения из ImageList
при удалении выбранных элементов ListView.