Silverlight 3 – Multiple selección en ListBox

Una de las nuevas funcionalidades que agrega Silverlight 3, es la posibilidad de habilitar la múltiple selección de elementos en un ListBox.

La propiedad que nos permite utilizar esta funcionalidad es SelectionMode, que puede tomar los siguiente valores:

  • Singlesolamente puedo seleccionar un sólo ítem, este es el valor por defecto.
  • Multiplese pueden seleccionar uno o varios ítems seleccionando uno y teniendo la tecla Ctrl o Shift y seleccionando otros ítems.
  • Extendedtambién permite seleccionar varios ítems, pero la tecla Shift tiene otra función. Seleccionando un ítem y teniendo la tecla Shift presionada, podemos ir a otro ítem y nos selecciona todos lo ítems entre los dos seleccionados.

Entonces de manera sencilla definimos un ListBox y cambiando la propiedad permitimos múltiple selección de ítems.

<ListBox x:Name="ListaMultiple"
         Margin="5"                    
         SelectionMode="Multiple" />

Ahora llenamos nuestro ListBox para que podemos seleccionar varios ítems.

private readonly List<string> nombres = 
    new List<string> { "Santiago", "Ruben", "Carlos", 
                       "Roberto", "Martin", "Andres", "Hernan" };
 
public MainPage()
{
   InitializeComponent();
   ListaMultiple.ItemsSource = nombres;           
}

De esta manera tenemos una lista con varios datos, donde podemos seleccionar la cantidad que necesitemos.

MLB1

El próximo paso es ver como podemos obtener los datos que fueron seleccionados. Para ello agregamos un botón a nuestro proyecto, y un bloque de texto que al presionar el botón mostrará los ítems seleccionados.

Nuestro XAML quedaría de la siguiente manera.

<StackPanel x:Name="LayoutRoot" Background="Gray">
    
    <StackPanel Orientation="Horizontal">
        <ListBox x:Name="ListaMultiple"
                 Margin="5"                    
                 SelectionMode="Multiple" />
 
        <Button x:Name="BotonMostrar"
                Width="100"
                Height="35"
                Content="Mostrar"
                Click="BotonMostrar_Click"/>
 
    </StackPanel>
        
    <TextBlock x:Name="Seleccion"
               Foreground="Red"
               FontSize="15" />
 
</StackPanel>

Ahora vamos al código donde mostramos la información. La colección de datos seleccionados es SelectedItems, que nos va a permitir recorrer todo lo que hemos seleccionado.

private void BotonMostrar_Click(object sender, 
                                System.Windows.RoutedEventArgs e)
{
   var nombresSeleccionados = ListaMultiple.SelectedItems;
 
   Seleccion.Text = string.Empty;
 
   foreach (string nombre in nombresSeleccionados)
   {
       if (Seleccion.Text.Length > 0)
          Seleccion.Text += ", ";
 
       Seleccion.Text += nombre;
   }
}

Ahora vemos como queda el ejemplo.

MLB2

Pueden descargar el proyecto aquí.

No Comments