我有一个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中删除拖动的项目而不从源文件中删除它的正确方法是什么?
答案 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()来应用过滤器。