Прокрутка ListBox к последнему элементу

Моя цель в том, чтобы отображать в ListBox последние добавленные элементы. Строго говоря, я симулирую через ListBox консоль вывода. В Avalonia ListBox не имеет метода ScrollToEnd, но имеет метод ScrollIntoView, который, к сожалению, не дает эффекта. Я нашел на GitHub issue на этот счет, где говорилось о решении через запуск метода в UI потоке, что тоже не возымело эффекта. Мои поиски привели меня к тому, что ScrollViewer имеет желаемый метод ScrollToEnd, но получить его при загрузке формы не получилось. Возможно потому, что он создается неявным образом именно когда контент не вмещается в viewport. С этим я смогу разобрать, но у меня родился вопрос: собственно, все ли я делаю правильно или есть более простой путь?


Ответы (1 шт):

Автор решения: Urfin Joos

Ответ на основе комментария Андрей NOP

Проблема была в том, что я:

  1. не использовал выделение элемента перед вызовом ScrollIntoView
  2. не заметил перегрузки ScrollIntoView, принимающей object

Рабочий код моем случае код выглядит так:

// обработчик события во MainWindowViewModel.cs
private void OnLogMessage(LogMessage logMessage)
{
   LogMessages.Add(logMessage);
   Dispatcher.UIThread.Post(x => { MainWindow.ScrollListBox(logMessage);}, null);
}

// код в MainWindow.cs
public void ScrollListBox(object item)
{
   ListboxLog.SelectedItem = item;
   ListboxLog.ScrollIntoView(item);
}
→ Ссылка