Я нашел способ выставить объект ScrollViewer ListView
для управления прокруткой.Мой DataContext
содержит коллекцию, полученную из ObservableCollection
, и в коде, который я написал, я связал обработчик событий с событием CollectionChanged
.Я использовал Decorator
, чтобы выставить первого потомка ListView
(границы), а его дочерний элемент - ScrollViewer
.Оттуда я вызываю метод ScrollToBottom()
для достижения желаемого поведения.
В коде моего просмотра, который содержит ListView
, это то, как он закодирован
MyViewModel viewModel = DataContext as MyViewModel;
viewModel.MyCollection.CollectionChanged += (sender,e) =>
{
if(e.NewItems != null)
{
Decorator border = VisualTreeHelper.GetChild(SummaryListView, 0) as Decorator;
ScrollViewer scroll = border.Child as ScrollViewer;
scroll.ScrollToBottom();
}
};
Iузнал, как выставить ScrollViewer
в сообщение в блоге Anshulee для WindowsClient .
Редактировать Ранее я проверял, достигнуто ли максимальное количество элементов в пользовательской коллекции.а затем прокручивается до дна.Это не сработало так хорошо при разных разрешениях экрана, потому что приложение может отображать 15 строк в ListView
на одном компьютере и 25 строк на другом.Так что теперь у меня всегда есть прокрутка вниз, чтобы отобразить самый новый элемент.