2010-05-24 70 views
5

Tôi đang cố xóa các mục khỏi hộp danh sách bị ràng buộc dữ liệu. Đây là ảnh chụp màn hình cách hộp danh sách trông như thế nào.Xóa các mục khỏi ListBox trong WPF?

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

Đây là mã thêm các mục vào danh sách.

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

Đây là mã 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> 

Bất cứ khi nào mục trong một ListBox được chọn, xóa nút (x) sẽ được hiển thị. Khi nhấp vào nó sẽ xóa mục đó khỏi hộp danh sách. Bất cứ ai có thể cho tôi biết làm thế nào tôi có thể làm điều này?

+0

Thử tìm kiếm StackOverflow. Bạn có thể tìm thấy vô số câu trả lời liên quan đến DataContext, VisualTreeHelper, v.v. – Amsakanna

Trả lời

6

Thử sử dụng ObservableCollection <T> thay vì danh sách đơn giản <T>.

ObservableCollection <T> sẽ thông báo cho hệ thống liên kết WPF bất cứ khi nào nội dung của nó thay đổi. Do đó, bạn sẽ chỉ phải xóa mục khỏi danh sách và giao diện người dùng sẽ được cập nhật.

11

ok đây là những gì tôi đã làm. Observablecollection làm việc như quyến rũ.

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 Bạn có thể xóa nhiệm vụ trực tiếp từ taskList như thế này 'taskList.Remove (tác vụ);'. Ngoài ra một phần khác là không cần thiết. – Amsakanna

+0

yeah u r rite abt that. – sanjeev40084

Các vấn đề liên quan