2010-02-17 16 views
11

Estoy descubriendo una forma de Seleccionar varios elementos en la vista de lista y eliminarlos en una determinada acción. Lo que no puedo entender es, ¿cómo debo tener estos múltiples artículos seleccionados? Creo que hay una lista en la que necesitaría agregarlos todos, pero ¿cuál es la mejor manera de abordar esta situación? ¿Tiene alguna idea? Gracias! -KevinWPF ListView Selección de múltiples elementos de la Vista de lista

Respuesta

21

Conjunto SelectionMode-Multiple o Extended e iterar a través de la SelectedItems en su ListView.

+1

Merece la pena señalar que 'SelectionMode.Multiple' no incluye la posibilidad de usar Shift + Click para seleccionar elementos consecutivos o Ctrl + A para seleccionar todo.Parece un error/supervisión. – Livven

+0

Enlace roto - SelectedItems. –

+0

¡Reparado! ¡¡Gracias!! – Arcturus

4

Usted puede hacer una de las siguientes ...

ListView.SelectionMode = SelectionMode.Extended de código subyacente o

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

también tiene SelectionMode 'múltiple' sin embargo, usted podría ir en lugar de ' extended 'que permite al usuario seleccionar múltiples elementos solo con el modificador de turno.

Para borrar los elementos seleccionados se puede utilizar el ListView.SelectedItems Propery de la siguiente manera

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

[o se puede utilizar la propiedad selectedIndices]

Hope esto evitará el problema que se ha encontrado :)

¡Salud!

8

Yo sugeriría no utilice la propiedad SelectedItems de ListView, en lugar enlazar la propiedad Selected de la única ListViewItem, a una clase ViewModel correspondiente. Después de esto, lo único que debe hacer es encontrar todos los objetos ViewModel que han vinculado la propiedad Selected TRUE, eliminarlos de la colección de modelos (si los elimina) y actualizar la interfaz de usuario. Si la colección es ObservableCollection, la interfaz de usuario se actualizará automáticamente. Buena suerte.

+2

¿Podría explicarnos por qué no debe usar la propiedad 'SelectedItems'? –

+1

porque complica el diseño y puede provocar errores. Si tiene una Propiedad seleccionada en cada objeto que está en ItemsSource, puede enlazar cada elemento muy fácilmente así:

+0

@NomanKhan debe ser ListViewItem no ListBoxItem; también no hay necesidad de BasedOn creo ... Pero un buen comentario, ¡me ayudó! –

0

Obtener el éxito también WPF listadas por escrito

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

Arcturus respuesta es buena si no estás usando MVVM. Pero si lo hace y su ItemsSource está vinculado a algunos objetos ObservableCollection de su ViewModel, recomendaría la respuesta de Tigran, con la aclaración de Noman Khan.

Esta es la forma en que se vería así:

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

En vista de modelo que tendría objeto: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem clase incluiría una propiedad seleccionada:

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

    public string SomeItemNum { get; set; } 

    public bool SomeItemSelected { get; set; } 
} 

entonces se podría iterar/ejecutar sobre la lista y obtener los que están seleccionados:

foreach (var item in SomeListViewList) 
    if (item.SomeItemSelected) 
     // do something 
Cuestiones relacionadas