Zeemee
Zeemee

Reputation: 10714

How can I unselect item in ListView?

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

Answers (8)

Jason Jakob
Jason Jakob

Reputation: 62

This is easier.

this.myListView.SelectedIndex = -1;
this.myListView.Update();

Upvotes: 2

Guilherme Marques
Guilherme Marques

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

tommylux
tommylux

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

BiggAye
BiggAye

Reputation: 9

if (listView1.SelectedItems.Count > 0)
    for (int i = 0; i < listView1.SelectedItems.Count; i++)
    {
        listView1.SelectedItems[i].Selected = false;
    }

Upvotes: -2

Brian Overby
Brian Overby

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

Dave
Dave

Reputation: 211

myListView.SelectedItems.Clear();

Upvotes: 21

Jeff
Jeff

Reputation: 237

Another effective way to approach this would be:

foreach (ListViewItem i in myListView.SelectedItems)
{
    i.Selected = false;
}

Upvotes: 1

Vladimir
Vladimir

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

Related Questions