none
ctrl+A в ListView RRS feed

  • Общие обсуждения

  • Господа, добрый день.

    Я использую MVVM в WPF приложении. Привязываю ObservableCollection к ListView. Каждый элемент коллекции имеет свойство IsSelected, на изменение которого настроен стиль для ListViewItem.

    Все работает, казалось бы, хорошо. Даже выделение элементов с помощью CTRL и SHIFT (я этого сам не прописывал, видимо это свойственно ListView вообще). На ListView в среднем несколько тысяч элементов.

    Единственное, с чем никак не могу разобраться, при нажатии CRTL+A (выделить все) выделяется только та часть, которая сейчас видна в окне. И при прокрутке колеса мыши вниз/вверх количество выделенных элементов увеличивается по мере того, как эти самые элементы попадают в поле видимости.

    Плюс к этому при изменении какого-либо свойства элемента коллекции (например поля int) изменения отображаются на listView только после прокрутки ScrollView туда-обратно, хотя поля измененных элементов коллекции уже давно стали новыми.

    Кстати, после обновления поля обязательно вызываю в ViewModel, которая есть DataContext для ListView this.OnPropertyChanged("ИмяПоляObservableCollection").

    Подскажите пожалуйста, как заставить ListView перерисовываться сразу и выделять то, что не попадает в видимую часть окна.

    17 апреля 2014 г. 13:41

Все ответы

  • Честно скажу мало что понял, но осмелюсь согрешить на контейнер в шаблоне ListView. Это может быть VirtualizingStackPanel (если правильно написал). Может у него такое странное поведение.

    Вообще не мешало бы глянуть на код. можете набросать пример в пустом проекте и выложить код.

    Или кто другой подскажет в чем тут дело.


    VB.Net - WPF, WinRT, WP

    17 апреля 2014 г. 13:47
    Отвечающий
  • С выделением "невидимого" решил вопрос так: по нажатию CTRL+A перво-наперво отписываю ObservableCollection от события OnCollectionChanged и каждый из ее элементов от события OnIsSelectedChanged. Потом руками задаю IsSelected = true и подписываюсь на изменения снова. Работает все быстро и хорошо.

    Второй вопрос решается так же.

    Но что-то мне подсказывает, что это немного не тот вариант. Наверняка есть способ поизящнее.

    Если есть идеи, подскажите пожалуйста.

     
    17 апреля 2014 г. 14:08
  • Благодарю за ответ. Код подготовлю и выложу.
    18 апреля 2014 г. 5:15