2012-03-29 7 views
0

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

Могу ли я изменить поведение в том смысле, что при поступлении нового элемента позиция прокрутки не изменяется, что означает, что новый не попадает в поле зрения над исходным верхним элементом.

ответ

0

Похоже, вы вставляете новые элементы в верхней части вас ObservbleCollection, чтобы они отображались поверх списка. Если вы добавите их в конец источника, когда они появятся в конце ListBox. Или, если у вас есть сортировка (например, через CollectionViewSource), вам нужно изменить логику сортировки, чтобы показать добавленные элементы в конце.

+0

он сортируется по дате - новейший сверху (что-то, что имеет смысл для клиента Twitter). Таким образом, изменение сортировки в этом случае невозможно :( –

0

Существует метод ScrollIntoView, но он не будет сохранять позицию только в том случае, если она находится где-то в списке. Если элемент находится ниже, он помещается в последнюю позицию. Поэтому, если вы введете «правильный» последний раз в поле зрения, чтобы вытолкнуть кулак так, как если бы элемент находился ниже, выведите его в последнюю позицию. У меня есть простой список из 3, и я сделал ListView Height = 40, поэтому у него было только место для 2. Следующие вытеснили первый элемент из поля зрения.

lvKDNames.ScrollIntoView (liIDName [2]);

Если Height = Auto будет сложнее определить правильный последний элемент, но это возможный подход.

+0

Хм - это может быть действительно способ, которым я могу пойти. В любом случае, это событие изменилось в коллекции Oberservable Collection, и я мог бы определить, имеет ли новый добавленный элемент более новую дату чем текущая верхняя часть - если это так после завершения отображения, я бы снова прокрутилIntoView теперь второй. Это со счетчиком новых элементов, и я всегда буду знать индекс, который мне нужно прокрутить. –

+0

Это то, что я попробую - будет дайте обратную связь, если (и как именно), я получил работу как ожидалось. Спасибо :) –

Смежные вопросы