从WPF中的ListBox中删除项目?

时间:2010-05-24 15:44:55

标签: 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)按钮。单击时,它应该从列表框中删除该项目。谁能告诉我怎么能这样做?

2 个答案:

答案 0 :(得分: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;
            }
        }

答案 1 :(得分:7)

尝试使用ObservableCollection&lt; T&gt;而不是一个简单的列表&lt; T&gt;。

ObservableCollection&lt; T&gt;每当内容发生变化时,都会通知WPF绑定系统。因此,您只需从列表中删除该项目,即可更新UI。