2010-02-17 20 views
11

Wynajduję sposób, aby wybrać wiele elementów w widoku listy i usuwanie ich z określonej akcji. Czego nie mogę zrozumieć, to w jaki sposób mam wybrać te kilka elementów? Sądzę, że istnieje lista, w której muszę je wszystkie dodać, ale jaki jest najlepszy sposób podejścia do tej sytuacji, czy macie jakieś pomysły? Dzięki! -KevinListView WPF Wybór wielu widoków listy Widok

Odpowiedz

21

Set SelectionMode do Multiple lub Extended i iterację SelectedItems w swojej ListView.

+1

Warto zauważyć, że 'SelectionMode.Multiple' nie zawiera możliwości użycia Shift + Kliknij, aby wybrać kolejne elementy lub Ctrl + A, aby wybrać wszystkie.Wygląda jak błąd/niedopatrzenie. – Livven

+0

Przerwane łącze - wybrane pozycje. –

+0

Naprawiono! Dzięki!! – Arcturus

4

Można wykonać jedną z następujących czynności ...

ListView.SelectionMode = SelectionMode.Extended w kod z opóźnieniem lub

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

masz również „wielokrotny” selectionMode jeszcze można raczej pójść na ' rozszerzony ", który pozwala użytkownikowi wybrać wiele elementów tylko za pomocą modyfikatora przesunięcia.

Do usuwania wybranych elementów można użyć ListView.SelectedItems propery następująco

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

[czy można użyć właściwości selectedIndices]

nadzieję, że to pozwoli uniknąć problemu napotkane :)

Pozdrawiam!

8

proponuję nie używać własność ListViewSelectedItems, zamiast wiązać własność pojedynczego ListViewItemSelected, do odpowiedniego ViewModel klasie. Następnie jedyną rzeczą, którą musisz zrobić, to znaleźć cały obiekt ViewModel, który związał właściwość PRAWDA Selected, usunąć je z kolekcji modeli (jeśli ją usuniesz) i odświeżyć interfejs użytkownika. Jeśli kolekcja to ObservableCollection, interfejs użytkownika zostanie odświeżony automatycznie. Powodzenia.

+2

Czy możesz podać wszelkie powody, dla których nie powinieneś używać właściwości 'SelectedItems'? –

+1

, ponieważ sprawia to, że projektowanie jest bardziej skomplikowane i może prowadzić do błędów. Jeśli masz wybraną właściwość dla każdego obiektu znajdującego się w ItemSource, możesz łatwo powiązać każdy element w następujący sposób:

+0

@NomanKhan Powinien być ListViewItem nie ListBoxItem; też nie potrzebuję BasedOn Myślę ... Ale dobry komentarz, pomógł mi! –

0

uzyskać sukces również WPF ListView pisząc

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

Arcturus odpowiedź jest dobra, jeśli nie używasz MVVM. Ale jeśli to zrobisz i twój ItemsSource jest powiązany z jakąś ObservableCollection obiektów w twoim ViewModelu, poleciłbym Tigran odpowiedź, z wyjaśnieniem Noman Khan.

To jak to będzie wyglądać:

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

W widoku modelu trzeba obiektu: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem Klasa obejmowałby wybranej właściwości:

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

    public string SomeItemNum { get; set; } 

    public bool SomeItemSelected { get; set; } 
} 

następnie można iteruj/uruchom listę i wybierz te, które są wybrane:

foreach (var item in SomeListViewList) 
    if (item.SomeItemSelected) 
     // do something 
Powiązane problemy