2010-05-24 123 views
5

我想從數據綁定的列表框中刪除項目。 以下是列表框的樣子。從WPF中的ListBox中刪除項目?

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

這是增加了在列表中的項目的代碼。

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

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

只要選擇在列表框項目,則顯示刪除(x)的按鈕。點擊時,應從列表框中刪除該項目。誰能告訴我我該怎麼做?

+0

嘗試搜索StackOverflow。您可能會發現大量涉及DataContext,VisualTreeHelper等的答案。 – Amsakanna 2010-05-24 16:13:22

回答

6

嘗試使用一個ObservableCollection <牛逼>,而不是一個簡單的列表<牛逼>。

ObservableCollection <T>將在其內容發生更改時通知WPF綁定系統。因此,您只需從列表中刪除該項目並更新UI。

11

好吧,這就是我所做的。 Observablecollection像魅力一樣工作。

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您可以像taskList.Remove(task);這樣直接從taskList中刪除任務。其他部分也不是必需的。 – Amsakanna 2010-05-24 16:47:25

+0

是的,你知道嗎? – sanjeev40084 2010-05-24 16:57:54