This is kind of an edge case, but it just stole about two hours of my day, so I thought it might be of interest for someone else who stumbles upon this problem.
In the application I am currently working on I am subclassing a ListView to make it handle strongly typed tags, and for example directly get a strongly typed instance of the tag of the currently selected item. To test my implementation I programmatically created an instance of my ListView subclass, added items and added an item to the selection using both:
Item.Selected = true
The problem was that this had no effect at all on the ListView\'s SelectedIndices and SelectedItems collections.
I tried doing the same thing on a ListView in one of the forms of my appliation and that worked, but it did not work if I instantiated the ListView directly in the code. After some googeling I finally found a comment to the MSDN documentation on the ListViewItem.Selected Property, saying that the Selected property could not be trusted if the ListView had not been drawn. I did some quick testing myself and confirmed that the problem indeed disappeared if the ListView was drawn.
So, the solution to the problem was to do something like this:
public void CanGetSelectedItems()
// Sadly, this is needed to make the ListView handle selection properly.
// If the ListView is instantiated directly SelectedIndices, SelectedItems etc
// do not update when modified.
var f = new DummyForm(listView);
ICollection<string> items = listView.SelectedItems;
private class DummyForm : Form
public DummyForm(ListView listView)
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;