У меня есть крупный ListBox с включенной вертикальной прокруткой, мой MVVM имеет Новый и Редактирование ICommands. Я добавляю новый объект в конец набора, но я хочу полосу прокрутки также к автоматической позиции в конец, когда я называю свой MVVM-AddCommand. Я также делаю объект доступным для редактирования (Путем вызова EditCommand с конкретным объектом строки) от некоторой другой части приложения так, чтобы мой ListBoxItem, входящий к использованию режима редактирования DataTrigger, но как я принесу ту конкретную строку (ListBoxItem) к представлению путем регулирования положения прокрутки.
Если я делаю его в стороне Представления, я могу назвать поле списка. ScrollInToView (lstBoxItem). Но что лучший способ состоит в том, чтобы решить эту общую проблему Прокрутки с точки зрения MVVM.
Обычно я устанавливаю 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 ()
для поддержки виртуализации