【问题标题】:Delete items from ListBox in WPF?从 WPF 中的 ListBox 中删除项目?
【发布时间】:2010-05-24 15:44:55
【问题描述】:

我正在尝试从数据绑定的列表框中删除项目。 这是列表框的截图。

这是在列表中添加项目的代码。

    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>

Whenever item in a listbox is selected, delete (x) button is displayed.单击时,它应该从列表框中删除该项目。谁能告诉我该怎么做?

【问题讨论】:

  • 尝试搜索 StackOverflow。您可能会找到大量涉及 DataContext、VisualTreeHelper 等的答案。

标签: wpf listbox


【解决方案1】:

好的,这就是我所做的。 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;
            }
        }

【讨论】:

  • +1 您可以像 taskList.Remove(task); 一样直接从 taskList 中删除任务。也不需要 else 部分。
【解决方案2】:

尝试使用 ObservableCollection 而不是简单的 List

ObservableCollection 将在其内容发生更改时通知 WPF 绑定系统。因此,您只需从列表中删除该项目,UI 就会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多