![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Stas123 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
как инвервертировать ObservableCollection ?
у меня в ObservableCollection время от времени стираются все старые данные и записываются новые. После этого я их вывожу на экран. Хотелось бы выводить их в обратном прорядке. Т.е. сейчас отображается так 1 3 15 А надо так 15 3 1 Как это лучше и оперативнеее сделать? |
|||
|
||||
YurIOs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 28.6.2011 Где: Ukraine Репутация: нет Всего: 1 |
Многие перечислимые типы которые встроенные в .Net Framework реализуют интерфейс Collection<T>, который в свою очередь предоставляет метод Collection<T>.Reverse<T>() -этот метод возвращает ссылку на IEnumerable<T> - список элементов в обратном порядке.
Это сообщение отредактировал(а) YurIOs - 7.7.2011, 18:33 |
|||
|
||||
Stas123 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
YurIOs, спасибо, а как преобразовать IEnumerable<T> в ObservableCollection<T> ?
Приведение типов не помогло. Просто, если сделать так в конструкторе
то не обновляется перевернутая коллекция. Это сообщение отредактировал(а) Stas123 - 8.7.2011, 11:43 |
|||
|
||||
YurIOs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 28.6.2011 Где: Ukraine Репутация: нет Всего: 1 |
Stas123, вам нужно одновременно держать в памяти как исходную коллекцию так и инвертированную, или же инвертирована коллекция используется только во время "вывода на экран" элементов коллекции?
Пока вы ответите на мой вопрос, я опишу иной метод решения вашей проблемы: Вы, наверное, добавляете новые элементы в ObservableCollection с помощью метода ObservableCollection<T>.Add(T item) - этот метод добавляет элементы в конец списка. Если изначально добавлять все новые элементы пользуясь методом ObservableCollection<T>.Insert(int index, T item) - то этот метод добавляет новые элементы в позицию index списка, а остальные элементы с индексом большим за index перемещаются в конец списка. Таким образом в вашем приложении более новые елементы будут в начале списка, а более устарелые в конце. Для этого нужно новые элементы добавлять в коллекцию с помощью строчки кода:
А устаревшие элементы всегда будут в конце списка. Это сообщение отредактировал(а) YurIOs - 8.7.2011, 18:11 |
|||
|
||||
YurIOs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 28.6.2011 Где: Ukraine Репутация: нет Всего: 1 |
Следует указать что как и первый предложенный мной метод, так и второй, выполняются за время пропорциональное количеству элементов в коллекции, что накладно при большом количестве элементов.
Stas123, 1) почему вы выбрали именно ObservableCollection а не какую-то другую коллекцию? 2) Вам важен вопрос обработки событий вставки и изменения свойств элементов? Это сообщение отредактировал(а) YurIOs - 8.7.2011, 18:34 |
|||
|
||||
Stas123 |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
инвертирована коллекция используется только во время "вывода на экран"
потому что
. Примерно раз в 0,5 секунд исходная коллекция одновляется полностью. я её вывожу на экран
я не силен в WPF, но думаю, что DisplayMemberBinding узнает , что коллекция изменилась и выводит её на экран. По поводу применения Insert. мне вообще не нужны старые значения. |
||||||
|
|||||||
DenWPF |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
Может быть сразу вставлять элементы в начало с помощью INsert(0, item)
|
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
Если речь о WPF, то используй CollectionView с сортировкой между твоей коллекцией и отображением. Объявить его можешь в XAML.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Stas123 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Всем спасибо с этим вопросом разобрался.
|
|||
|
||||
DenWPF |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
Так нажми сверху справа топика, что проблема решена.
|
|||
|
||||
Stas123 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
не могу, почему-то когда нажимаю "пометить как решенный" появляется окошечко "Загрузка. Пожалуйста, подождите" и все.
|
|||
|
||||
Буратиныч |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
А как вставить элемент в коллекцию с заменой, без сдвига, как в Insert?
Это сообщение отредактировал(а) Буратиныч - 4.2.2013, 18:49 |
|||
|
||||
dzaraev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: 1 Всего: 1 |
collection[someIndex] = newItem; --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
Буратиныч |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
Т.е. как в массиве? Как всё просто оказывается ![]() |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |