Reputation: 10714
I have a ListView with a couple of items in it. When the ListView looses focus, the last selected ListViewItem is still "selected" with a gray background.
I would like to achieve that on ListView.FocusLost, the selection is gone and therefore the ListView.SelectedIndexChanged event will occur.
Any ideas?
I am using .NET CF 3.5.
Upvotes: 24
Views: 63574
Reputation: 62
This is easier.
this.myListView.SelectedIndex = -1;
this.myListView.Update();
Upvotes: 2
Reputation: 495
You can try it:
MyList.ItemSelected += (sender, e) => {
((ListView)sender).SelectedItem = null;
};
or if you have the OnSelection created in your View code behind(xaml.cs):
private void OnSelection(object sender, SelectedItemChangedEventArgs e)
{
((ListView)sender).SelectedItem = null;
}
Regards
Upvotes: 2
Reputation: 89
If you are using EditItemTemplate, rather than ItemTemplate, you may have been trying to figure out why ListView1.SelectedIndex = -1; hasn't been working. It's because you need to use ListView1.EditIndex = -1;
Upvotes: 0
Reputation: 9
if (listView1.SelectedItems.Count > 0)
for (int i = 0; i < listView1.SelectedItems.Count; i++)
{
listView1.SelectedItems[i].Selected = false;
}
Upvotes: -2
Reputation: 301
I know this is late but in case someone else needed the solution I would like to add to the solution.
You need to set the Focused property to false to avoid deselected items having focus.
for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
{
this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
this.myListView.Items[this.myListView.SelectedIndices[i]].Focused = false;
}
Upvotes: 4
Reputation: 237
Another effective way to approach this would be:
foreach (ListViewItem i in myListView.SelectedItems)
{
i.Selected = false;
}
Upvotes: 1
Reputation: 3689
Suppose you are accessing the ListView from a parent form/control.
You can add this piece of code in the form's/control's constructor/load event:
this.myListView.LostFocus += (s, e) => this.myListView.SelectedIndices.Clear();
Ok, so in your case, you would replace that delegate with:
if (this.myListView.SelectedIndices.Count > 0)
for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
{
this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
}
You can give the code a nicer form, btw.
Upvotes: 22