Kevin
Kevin

Reputation: 161

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

Upvotes: 16

Views: 51655

Answers (5)

Maverick Meerkat
Maverick Meerkat

Reputation: 6404

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

Upvotes: 11

Arcturus
Arcturus

Reputation: 27055

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

Upvotes: 27

Refat Sardar
Refat Sardar

Reputation: 67

Get success also WPF listview by writing

while (lvJournalDetails.SelectedItems.Count > 0)
{
    lvJournalDetails.Items.Remove(lvJournalDetails.SelectedItem);
}

Upvotes: 0

Tigran
Tigran

Reputation: 62248

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.

Upvotes: 13

Amsakanna
Amsakanna

Reputation: 12934

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!

Upvotes: 6

Related Questions