Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF ListView Selecting Multiple List View Items

I am figuring out a way to Select Multiple items in list view and deleting them on a certain action. What I can't figure out is, how should I have these multiple items selected? I would think there is a list that I would need to add them all into, but what's the best way to approach this situation, do you have any ideas? Thanks! -Kevin

like image 236
Kevin Avatar asked Feb 17 '10 15:02

Kevin


4 Answers

Set SelectionMode to Multiple or Extended and iterate through theSelectedItems in your ListView.

like image 176
Arcturus Avatar answered Oct 14 '22 06:10

Arcturus


I would suggest do not use the SelectedItems property of ListView, instead bind the Selected property of the single ListViewItem, to a corresponding ViewModel class. After this, the only thing you need to do is to find all ViewModel object that have bound the Selected property TRUE, remove them from model collection (if you do remove) and refresh UI. If the collection is ObservableCollection, the UI will be refreshed automatically. Good Luck.

like image 31
Tigran Avatar answered Oct 14 '22 05:10

Tigran


Arcturus answer is good if you're not using MVVM. But if you do and your ItemsSource is binded to some ObservableCollection of objects in your ViewModel, I would recommend Tigran answer, with Noman Khan clarification.

This is how it would look like:

<ListView ItemsSource="{Binding SomeListViewList}">
    <ListView.Resources>
       <Style TargetType="{x:Type ListViewItem}">
          <Setter Property="IsSelected" Value="{Binding SomeItemSelected, Mode=TwoWay}" />
       </Style>
    </ListView.Resources>
    ...
</ListView>

In View Model you would have object: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem Class would include a Selected property:

public class SomeItem
{
    public string SomeItemName { get; set; }

    public string SomeItemNum { get; set; }

    public bool SomeItemSelected { get; set; }
}

Then you could iterate/run over the list and get the ones that are selected:

foreach (var item in SomeListViewList)
   if (item.SomeItemSelected)
      // do something
like image 34
Maverick Meerkat Avatar answered Oct 14 '22 07:10

Maverick Meerkat


You can do one of the following...

ListView.SelectionMode = SelectionMode.Extended in code-behind or

<ListView SelectionMode="Extended"></ListView> in XAML

you also have 'multiple' selectionMode yet you could rather go for 'extended' which allows the user to select multiple items only using shift modifier.

For deleting the items selected you could use the ListView.SelectedItems Propery as follows

while( myListView.SelectedItems.Count > 0 )
{
    myListView.Items.Remove(list.SelectedItems[0]);
}

[or you could use the SelectedIndices property]

Hope this will avoid the issue you encountered :)

Cheers!

like image 5
Amsakanna Avatar answered Oct 14 '22 06:10

Amsakanna