Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > ListView прокрутка списка.


Автор: hexzo 23.9.2011, 09:19
Вообщем этот способ работает в нормальном месте.
Код

button1.Click += (s, e) =>
{
  listView1.ScrollIntoView(listView1.Items[listView1.Items.Count - 1]);
};


Но то же самое не работает в ненормальном месте, в селекторе шаблона для элемента списка
Код

RoutedEventHandler d2 = (sender, e) =>
{
  MainWindow.instance.getFocusedPanel().ScrollIntoView(MainWindow.instance.getFocusedPanel().Items[MainWindow.instance.getFocusedPanel().Items.Count - 1]);
}
facElem.AddHandler(TextBox.LoadedEvent, d2);

Судя по отладочным сообщением это место в коде обрабатывается, ListView нужный, количество элементов вроде бы верное. А список не прокручивается.

P.S. Поправка, это нормальный список прокручивается, а мой нет.

Автор: hexzo 23.9.2011, 09:44
Проблема заключалась в том что у меня каким то образом список непонятно когда обновляется.

1) У меня добавляется элемент в ресурс данных для списка.
2) Затем я вызываю InotifyPropertyChanged();

Если вызвать прокрутку списка перед INotifyPropertyChanged, то естественно ничего не происходит.
Если после, то список прокручивается, что тоже логично.
А если вызывать прокрутку на TextBox.LoadedEvent, который является частью добавляемого в список элемента, то ничего не происходит. Почему?

Автор: Gvozdin 23.9.2011, 12:25
Виртуализация в ListView выключена?

Непонятно в какой момент у вас происходит TextBox.Loaded. С ресурсами тоже непонятно что происходит.
Какой сценарий вообще?

Если не в событии работает, то просто ListView не готов ещё может быть.
Как быстрое решение так же можно попробовать запустить ScrollIntoView через Dispatcher.BeginInvoke с приоритетом Background.

Автор: hexzo 23.9.2011, 13:24
Цитата

Виртуализация в ListView выключена?

В описании свойств не нашёл никакой виртуализации, что это?

Цитата
Какой сценарий вообще?

1) Добавление в ресурс_для_списка ещё одного элемента.
2) Вызов InotifyPropertyChanged для ресурса_для_списка.
3) потом происходит отрисовка текстбокса, который является частью визуального отображения элемента в списке.
4) когда отрисовка заканчивается, вызывается Loaded у текстбокса.

И если на этот Loaded повесить прокрутку списка, то она не работает.

Автор: Gvozdin 23.9.2011, 21:31
Виртуализация это грубо говоря VirtualizingStackPanel.IsVirtualizing, но оно тут не влияет.

Сценарий понятен. Я сделал такой же, у меня всё прокручивается.

Вот про это поподробнее:
Цитата(hexzo @  23.9.2011,  09:19 Найти цитируемый пост)
P.S. Поправка, это нормальный список прокручивается, а мой нет.


Какой "мой" список? smile

Автор: hexzo 23.9.2011, 22:59
Gvozdin
Цитата

Сценарий понятен. Я сделал такой же, у меня всё прокручивается.

Ну, значит это у меня что-то намудрено. Хз. как это отловить.  smile 

Цитата

Какой "мой" список?

Подвергнутый творческим мутациям. Короче тот список что в составе программы. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)