2010-05-24 20 views
5

Próbuję usunąć elementy z listy listbox, która jest związana danych. Oto zrzut ekranu, jak wygląda listbox.Usunąć elementy z ListBox w WPF?

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

Jest to kod, który dodaje elementy na listach.

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; 
    } 

Jest to kod 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> 

Gdy jest wybrana pozycja w listbox, wyświetlany jest przycisk Usuń (x). Po kliknięciu powinien usunąć ten element z listy. Czy ktoś może mi powiedzieć, jak mogę to zrobić?

+0

Spróbuj wyszukać StackOverflow. Możesz znaleźć mnóstwo odpowiedzi z wykorzystaniem DataContext, VisualTreeHelper, itp. – Amsakanna

Odpowiedz

6

Spróbuj użyć obiektu ObservableCollection <T> zamiast prostego wykazu <T>.

System ObservableCollection <T> powiadomi system wiązania WPF o każdej zmianie jego zawartości. W związku z tym wystarczy usunąć element z listy, a interfejs użytkownika zostanie zaktualizowany.

11

OK, właśnie to zrobiłem. Observablecollection działał jak urok.

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 Możesz usunąć zadanie bezpośrednio z listy zadań takiej jak ta 'taskList.Remove (task);'. Również część else nie jest wymagana. – Amsakanna

+0

tak, rytuał tego. – sanjeev40084

Powiązane problemy