| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > как инвервертировать ObservableCollection ? |
| Автор: Stas123 7.7.2011, 17:58 |
| как инвервертировать ObservableCollection ? у меня в ObservableCollection время от времени стираются все старые данные и записываются новые. После этого я их вывожу на экран. Хотелось бы выводить их в обратном прорядке. Т.е. сейчас отображается так 1 3 15 А надо так 15 3 1 Как это лучше и оперативнеее сделать? |
| Автор: YurIOs 7.7.2011, 18:28 | ||
Многие перечислимые типы которые встроенные в .Net Framework реализуют интерфейс Collection<T>, который в свою очередь предоставляет метод Collection<T>.Reverse<T>() -этот метод возвращает ссылку на IEnumerable<T> - список элементов в обратном порядке.
|
| Автор: Stas123 8.7.2011, 11:24 | ||
| YurIOs, спасибо, а как преобразовать IEnumerable<T> в ObservableCollection<T> ? Приведение типов не помогло. Просто, если сделать так в конструкторе
то не обновляется перевернутая коллекция. |
| Автор: YurIOs 8.7.2011, 18:08 | ||
| Stas123, вам нужно одновременно держать в памяти как исходную коллекцию так и инвертированную, или же инвертирована коллекция используется только во время "вывода на экран" элементов коллекции? Пока вы ответите на мой вопрос, я опишу иной метод решения вашей проблемы: Вы, наверное, добавляете новые элементы в ObservableCollection с помощью метода ObservableCollection<T>.Add(T item) - этот метод добавляет элементы в конец списка. Если изначально добавлять все новые элементы пользуясь методом ObservableCollection<T>.Insert(int index, T item) - то этот метод добавляет новые элементы в позицию index списка, а остальные элементы с индексом большим за index перемещаются в конец списка. Таким образом в вашем приложении более новые елементы будут в начале списка, а более устарелые в конце. Для этого нужно новые элементы добавлять в коллекцию с помощью строчки кода:
А устаревшие элементы всегда будут в конце списка. |
| Автор: YurIOs 8.7.2011, 18:31 |
| Следует указать что как и первый предложенный мной метод, так и второй, выполняются за время пропорциональное количеству элементов в коллекции, что накладно при большом количестве элементов. Stas123, 1) почему вы выбрали именно ObservableCollection а не какую-то другую коллекцию? 2) Вам важен вопрос обработки событий вставки и изменения свойств элементов? |
| Автор: DenWPF 14.7.2011, 02:11 |
| Может быть сразу вставлять элементы в начало с помощью INsert(0, item) |
| Автор: -Mikle- 14.7.2011, 09:20 |
| Если речь о WPF, то используй CollectionView с сортировкой между твоей коллекцией и отображением. Объявить его можешь в XAML. |
| Автор: Stas123 14.7.2011, 10:09 |
| Всем спасибо с этим вопросом разобрался. |
| Автор: DenWPF 14.7.2011, 12:59 |
| Так нажми сверху справа топика, что проблема решена. |
| Автор: Stas123 14.7.2011, 13:18 |
| не могу, почему-то когда нажимаю "пометить как решенный" появляется окошечко "Загрузка. Пожалуйста, подождите" и все. |
| Автор: Буратиныч 4.2.2013, 18:48 |
| А как вставить элемент в коллекцию с заменой, без сдвига, как в Insert? |
| Автор: dzaraev 5.2.2013, 17:07 | ||
http://stackoverflow.com/questions/6873533/observable-collection-replace-item |
| Автор: Буратиныч 7.2.2013, 16:44 | ||||
Т.е. как в массиве? Как всё просто оказывается |