Я не уверен, почему вы хотели бы получить список (или коллекцию), что такое ListView.SelectedListViewItemCollection
, из ListViewItem
, который является единственным элементом в элементе управления ListView? Похоже, вы хотели бы обратный, чтобы получить список выбранных элементов из ListView.SelectedListViewItemCollection
. Это верно? Если да, то где вы можете достичь этого.
Учитывая у вас есть список объектов User
, ваш ListView может быть заполнен так:
listview.BeginUpdate();
foreach (User u in userList)
{
ListViewItem item = new ListViewItem() { Text = u.Name, Tag = u};
listview.Items.Add(item);
}
listview.EndUpdate();
где userList
список типизированных из User
объектов, т.е. List<User>
. Затем вы можете получить выбранные элементы в ListView:
ListViewItem[] collection = GetSelectedItems(listview);
List<string> names = new List<string>();
Parallel.ForEach(collection, item =>
{
User u = item.Tag as User;
names.Add(u.Name);
});
private static ListViewItem[] GetSelectedItems(ListView listView)
{
ListViewItem[] selectedItems = new ListViewItem[0];
MethodInvoker miGetSelectedItems = delegate
{
selectedItems = new ListViewItem[listview.SelectedItems.Count];
listview.SelectedItems.CopyTo(selectedItems, 0);
};
if (listview.InvokeRequired)
{
listview.Invoke(miGetSelectedItems);
}
else
{
miGetSelectedItems();
}
return selectedItems;
}
Надеюсь, это поможет. Удачи!
Не могли бы вы дать нам немного более общую картину? Что вы пытаетесь сделать с возвращаемым значением здесь? Я подозреваю, что есть лучший способ достичь того, что вы пытаетесь сделать. – Crisfole
Вместо этого вы должны вернуть 'IEnumerable''. –
SLaks
Никогда не пробовал, но я бы сказал, что проблема с Клоном. В качестве выбранных элементов должны быть те элементы, где выбрано значение true. –