C# 是否从WPF中的有界ListBox中删除ListBoxItems?

C# 是否从WPF中的有界ListBox中删除ListBoxItems?,c#,.net,wpf,C#,.net,Wpf,我有一个列表框,其中的项目可以拖放到StackPanel上。当删除这些项目时,我需要将它们从绑定到列表的列表框中删除 已删除的项,例如,应删除的项将是一个人 public class Person() { private int Age {get;set;} private string Name {get;set;} public Person(){...} /*Getter and Setter Methods to follow*/ } 注意这个类是完

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

已删除的项,例如,应删除的项将是一个人

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

    public Person(){...}

    /*Getter and Setter Methods to follow*/
}
注意这个类是完全任意的,只是作为一个例子使用

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

List<Person> personList = PersonDAO.getAll();
listBox.ItemsSource = personList;
listBox.DisplayMemberPath = "Name";
List personList=PersonDAO.getAll();
listBox.ItemsSource=个人列表;
listBox.DisplayMemberPath=“Name”;
到目前为止,在我的应用程序中,除了从列表中删除项目外,其他一切都很正常


删除项目时,需要将其从列表中删除。如何正确地从列表框中删除拖动的项目而不将其从源中删除?

使用
ObservableCollection
或另一个实现
INotifyCollectionChanged
的集合,如下所示:

使用
ObservableCollection
或另一个实现
inotifycollection更改如下:

不要考虑从
列表框中删除项目。考虑从
列表框
项目资源
绑定到的集合中删除项目。这样可以避免编写各种丑陋、笨拙的代码


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

不要考虑从
列表框中删除项目。考虑从
列表框
项目资源
绑定到的集合中删除项目。这样可以避免编写各种丑陋、笨拙的代码


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

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

List<Person> personList = PersonDAO.getAll();
listBox.ItemsSource = personList;
listBox.DisplayMemberPath = "Name";
personListView = (CollectionView)
    CollectionViewSource.GetDefaultView(personList);
personListView.Filter += (item) => { someCriteriaForInclusion };
List personList=PersonDAO.getAll();
listBox.ItemsSource=个人列表;
listBox.DisplayMemberPath=“Name”;
personListView=(CollectionView)
CollectionViewSource.GetDefaultView(personList);
personListView.Filter+=(项)=>{someCriteriaForInclusion};

发生拖动时,调用personListView.Refresh()重新应用筛选器。

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

List<Person> personList = PersonDAO.getAll();
listBox.ItemsSource = personList;
listBox.DisplayMemberPath = "Name";
personListView = (CollectionView)
    CollectionViewSource.GetDefaultView(personList);
personListView.Filter += (item) => { someCriteriaForInclusion };
List personList=PersonDAO.getAll();
listBox.ItemsSource=个人列表;
listBox.DisplayMemberPath=“Name”;
personListView=(CollectionView)
CollectionViewSource.GetDefaultView(personList);
personListView.Filter+=(项)=>{someCriteriaForInclusion};

发生拖动时,请调用personListView.Refresh()重新应用筛选器。

我的问题可能用词不对。上述解决方案是否允许我只从列表框中删除项目,而不知道绑定到列表框的源?我不认为在MVVMI中只从视图中删除是正确的工作方式可能会让我的问题措词错误。上面的解决方案是否允许我只从列表框中删除项,而不知道绑定到列表框的源代码?我不认为只从视图中删除项是在MVVM中工作的正确方式