从WPF中的有界ListBox中删除ListBoxItems?

时间:2011-02-21 16:47:31

标签: c# .net wpf

我有一个ListBox,其中包含可以拖放到StackPanel上的项目。删除这些项目时,我需要将它们从ListBox中删除,ListBox绑定到列表。

beign的项目已删除,应作为示例移除,将为Person。

public class Person()
{
    private int Age {get;set;}
    private string Name {get;set;}

    public Person(){...}

    /*Getter and Setter Methods to follow*/
}

注意此类完全是任意的,仅用作示例。

使用以下代码将此类绑定到ListBox。获取Person对象列表的调用也不是特定于实现的。

List<Person> personList = PersonDAO.getAll();
listBox.ItemsSource = personList;
listBox.DisplayMemberPath = "Name";

到目前为止,除了从列表中删除项目外,我的应用程序中的一切正常。

删除某个项目时,需要从列表中删除该项目。如何从ListBox中删除拖动的项目而不从源文件中删除它的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

使用ObservableCollection<Person>或其他实施INotifyCollectionChanged的集合,如下所示:http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx

答案 1 :(得分:1)

不要考虑从ListBox删除项目。考虑从集合中删除ItemsSource ListBox所绑定的项目。这可以避免编写各种丑陋,笨拙的代码。

听起来你不愿意修改Person对象的基础集合。好。因此,创建一个新的,不是“所有Person个对象”,而是“Person中仍然存在的所有ListBox个对象。”

答案 2 :(得分:1)

最简单的方法是过滤人员列表,如下所示:

List<Person> personList = PersonDAO.getAll();
listBox.ItemsSource = personList;
listBox.DisplayMemberPath = "Name";
personListView = (CollectionView)
    CollectionViewSource.GetDefaultView(personList);
personListView.Filter += (item) => { someCriteriaForInclusion };

当发生拖动时,调用人ListView.Refresh()来应用过滤器。