Удаление ListBoxItems из ограниченного ListBox в WPF? - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть ListBox, в котором есть элементы, которые можно перетаскивать на панель стека. Когда эти элементы будут удалены, мне нужно удалить их из ListBox, который привязан к списку.

Предмет, который является биггэ, отброшен и должен быть удален в качестве примера, будет Персоном.

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 ]

1 голос
/ 21 февраля 2011

Не думайте с точки зрения удаления предметов из ListBox.Подумайте об удалении предметов из коллекции, с которой связан ItemsSource из ListBox.Это позволяет избежать написания всех видов уродливого, громоздкого кода.

Похоже, вы не хотите изменять базовую коллекцию Person объектов.ХОРОШО.Так что создайте новый, который будет не "все Person объекты", а скорее "все Person объекты, все еще присутствующие в ListBox."

1 голос
/ 22 февраля 2011

Самый простой способ - отфильтровать список людей, например, так:

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

Когда происходит перетаскивание, вызовите personListView.Refresh (), чтобы повторно применить фильтр.

1 голос
/ 21 февраля 2011

Используйте ObservableCollection<Person> или другую коллекцию, реализующую INotifyCollectionChanged, как здесь: http://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...