2010-05-24 15 views
5

Ich versuche, Elemente aus der Listbox zu löschen, die datengebunden ist. Hier ist der Screenshot, wie Listbox aussieht.Löschen von Elementen aus ListBox in WPF?

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

Dies ist der Code, welche Elemente in Listen erstellt.

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

Dies ist der XAML-Code,

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

Jedes Mal, wenn Element in einem Listenfeld ausgewählt ist, löschen (x) Taste angezeigt wird. Wenn Sie darauf klicken, sollte das Element aus der Listbox gelöscht werden. Kann mir jemand sagen, wie kann ich das machen?

+0

Versuchen Sie StackOverflow zu suchen. Sie können viele Antworten finden, die DataContext, VisualTreeHelper, etc. beinhalten. – Amsakanna

Antwort

6

Versuchen Sie, eine ObservableCollection <T> statt einer einfachen Liste <T> verwenden.

Die ObservableCollection <T> benachrichtigt das WPF-Bindungssystem, sobald sich der Inhalt geändert hat. Daher müssen Sie das Element nur aus der Liste entfernen und die Benutzeroberfläche wird aktualisiert.

11

ok das ist was ich getan habe. Observablecollection arbeitete wie Charme.

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 Sie können die Aufgabe direkt aus taskList entfernen, wie dies 'taskList.Remove (task);'. Auch der else Teil wird nicht benötigt. – Amsakanna

+0

yeah rite abt das. – sanjeev40084