Как управлять позицией прокрутки ListBox в приложении MVVM WPF

У меня есть крупный ListBox с включенной вертикальной прокруткой, мой MVVM имеет Новый и Редактирование ICommands. Я добавляю новый объект в конец набора, но я хочу полосу прокрутки также к автоматической позиции в конец, когда я называю свой MVVM-AddCommand. Я также делаю объект доступным для редактирования (Путем вызова EditCommand с конкретным объектом строки) от некоторой другой части приложения так, чтобы мой ListBoxItem, входящий к использованию режима редактирования DataTrigger, но как я принесу ту конкретную строку (ListBoxItem) к представлению путем регулирования положения прокрутки.

Если я делаю его в стороне Представления, я могу назвать поле списка. ScrollInToView (lstBoxItem). Но что лучший способ состоит в том, чтобы решить эту общую проблему Прокрутки с точки зрения MVVM.

24
задан Jacob 26 April 2016 в 23:01
поделиться

1 ответ

Обычно я устанавливаю IsSynchronizedWithCurrentItem = "True" в ListBox . Затем я добавляю обработчик SelectionChanged и всегда отображаю выбранный элемент с помощью следующего кода:

    private void BringSelectionIntoView(object sender, SelectionChangedEventArgs e)
    {
        Selector selector = sender as Selector;
        if (selector is ListBox)
        {
            (selector as ListBox).ScrollIntoView(selector.SelectedItem);
        }
    }

Из моей виртуальной машины я могу получить представление коллекции по умолчанию и использовать одно из MoveCurrent * ( ) , чтобы гарантировать, что редактируемый элемент является текущим элементом.

CollectionViewSource.GetDefaultView(_myCollection).MoveCurrentTo(thisItem);

ПРИМЕЧАНИЕ. Отредактировано для использования ListBox.ScrollIntoView () для поддержки виртуализации

28
ответ дан 28 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: