2010-05-24 19 views
5

Estoy tratando de eliminar elementos del listbox que está enlazado a datos. Aquí está la captura de pantalla de cómo se ve el cuadro de lista.¿Eliminar elementos de ListBox en WPF?

alt text http://i46.tinypic.com/xcnn0n.png

Este es el código que añade elementos en las listas.

public class Task 
    { 
     public string Taskname { get; set; } 

     public Task(string taskname) 
     { 
      this.Taskname = taskname; 
     } 
    } 

    public void GetTask() 
    { 
     taskList = new List<Task> 
          { 
           new Task("Task1"), 
           new Task("Task2"), 
           new Task("Task3"), 
           new Task("Task4") 
          }; 

     lstBxTask.ItemsSource = taskList; 
    } 

Este es el código XAML,

<ListBox x:Name="lstBxTask" Style="{StaticResource ListBoxItems}" > 
     <ListBox.ItemTemplate>     
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Taskname}" Style="{StaticResource TextInListBox}"/> 
        <Button Name="btnDelete" Style="{StaticResource DeleteButton}" Click="btnDelete_Click"> 
        </Button>       
       </StackPanel>      
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Cada vez que se selecciona elemento en un cuadro de lista, se muestra el botón de eliminación (X). Cuando se hace clic en él, debe eliminar ese elemento del cuadro de lista. ¿Alguien puede decirme cómo puedo hacer esto?

+0

Intente buscar StackOverflow. Puede encontrar muchas respuestas relacionadas con DataContext, VisualTreeHelper, etc. – Amsakanna

Respuesta

6

Intente utilizar un ObservableCollection <T> en lugar de una simple lista <T>.

El ObservableCollection <T> notificará al sistema WPF-binding-system siempre que su contenido haya cambiado. Por lo tanto, solo tendrá que eliminar el elemento de la lista y se actualizará la interfaz de usuario.

11

bien esto es lo que hice. Observablecollection funcionó como el encanto.

private ObservableCollection<Task> taskList; 

public void GetTask() 
     { 
      taskList = new ObservableCollection<Task> 
           { 
            new Task("Task1"), 
            new Task("Task2"), 
            new Task("Task3"), 
            new Task("Task4") 
           }; 

      lstBxTask.ItemsSource = taskList; 
     } 

private void btnDelete_Click(object sender, RoutedEventArgs e) 
     { 
      var button = sender as Button; 
      if (button != null) 
      { 
       var task = button.DataContext as Task; 

       ((ObservableCollection<Task>) lstBxTask.ItemsSource).Remove(task); 
      } 
      else 
      { 
       return; 
      } 
     } 
+0

+1 Puede eliminar la tarea directamente de taskList como esta 'taskList.Remove (task);'. Además, la parte else no es necesaria. – Amsakanna

+0

sí, rito, eso. – sanjeev40084

Cuestiones relacionadas