Как удалить элементы из наблюдаемой коллекции - PullRequest
2 голосов
/ 30 июня 2010

Я прошу прощения за роман, но я хотел объяснить столько, сколько я сделал до сих пор.

В моем текущем проекте у меня есть приложение, которое использует сервис, который предоставляет коллекцию как <List>.Из-за того, как я использую эти данные в приложении, мне пришлось преобразовать эти данные в наблюдаемую коллекцию.Это было сделано для того, чтобы при выборе и перемещении данных обновления пользовательского интерфейса приложения обновлялись с помощью INotifyPropertyChanged и INotifyCollectionChanged.

Когда я сталкиваюсь с проблемой сейчас, у меня есть список, связанный с наблюдаемой коллекцией внутри списка, у меня есть таблица данных, которая отображает элементы коллекции.Этот шаблон данных содержит кнопку, которая должна позволять пользователю нажимать кнопку для каждого элемента, чтобы удалить их из коллекции.Вариант использования для этого - список, в котором хранится выбранное имя, выбранное из вида сетки.Как только пользователь выбрал имена в виде сетки, они сохраняются (в наблюдаемой коллекции в виде очереди) и отображаются в пользовательском интерфейсе в элементе управления списком, который показывает все выбранные имена.Мне нужно предоставить пользователю возможность удалять эти имена в любом выбранном порядке.

Из того, что я читал, нет средств для перечисления / индексации наблюдаемой коллекции.В таких ситуациях вы должны использовать List или Array.Однако для обновления элементов в представлении списка они должны быть в наблюдаемой коллекции.Из того, что я прочитал, видно, что когда событие инициируется, мне нужно преобразовать наблюдаемую коллекцию в массив, а затем вычислить массив для определения индекса и затем удалить запись соответствующим образом?

Я думаю, что я, возможно, не в этом разбираюсь, так как мне кажется, что я уже закончил эту проблему?Вышеупомянутый сценарий не кажется правильным, потому что я упал, как будто я делаю много преобразований в и из коллекций, чтобы просто удалить запись?Кто-нибудь знает эффективные средства для удаления записей из коллекции (в любом выбранном порядке), когда коллекция отображается как элемент управления в списке?Я успешно удалил последнюю запись, добавленную в коллекцию, используя RemoveAt (), однако я не имел никакого успеха в случайном удалении записей.

Запоздалая мысль: Часть этой проблемы может быть связана с тем фактом, что у меня есть кнопка, вставленная в шаблон данных (элемент управления), и в результате этот элемент фактически не выбирается дособытие срабатывает на событие кнопки?Прошу прощения за бессвязную речь, но я часами занимался этим и добился незначительного прогресса.Любые советы или идеи будут оценены!

1 Ответ

5 голосов
/ 30 июня 2010

ObservableCollection<T> наследуется от Collection<T>, который реализует IList<T>, поэтому вы, безусловно, можете индексировать и перечислять его. У него есть метод Remove, который принимает объект для удаления и удаляет первое вхождение в коллекции, и метод RemoveAt, который принимает индекс и удаляет элемент с этим индексом. ,

Исходя из вашей запоздалой мысли, похоже, что у вас есть WPF ListBox с ItemTemplate, который создает кнопку. ListBox установит DataContext каждого созданного шаблона на элемент в списке, к которому привязывается, так что вы можете получить ссылку на элемент, который создал Button, из свойства DataContext на Button или с помощью привязки.

...