Проблема выбора ListView - кэширование предотвращает выбор многих элементов - PullRequest
1 голос
/ 01 октября 2010

У меня проблема с тем, как ListView выбирает свои элементы.

У меня ListView привязан к ObservableCollection элементов, у которых есть свойство Selected. Я связал состояние выбора следующим образом:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="IsSelected" Value="{Binding Path=Selected, Mode=TwoWay}" />
    </Style>
</ListView.ItemContainerStyle>

Но с приблизительно 1000 Элементами в списке, ListView содержит контейнеры только для видимых объектов при запуске или около 500, когда уже прокручивается. Так что даже если я выберу все (Ctrl + A), выбор будет установлен только для этих 500.

Я также попробовал множество других решений, которые мне приходили в голову, но ни одно из них не сработало.

  • ListView.SelectedItems не может быть привязан к.
  • Использование события SelectionChanged для установки свойства 'Selected' - Вызывает много событий SelectionChanged при прокрутке до области, которая не кэшировалась во время выбора, и, следовательно, элементы были "новыми выбранными" для списка.
  • Использование события SelectionChanged объекта ListView для добавления и удаления измененного выделения в дополнительную коллекцию. Невозможно выбрать из ViewModel, поскольку работает только в одном направлении.

Возможно ли в любом случае иметь ListView, где я могу выбрать более 500 элементов и иметь эту информацию где-нибудь в ViewModel. Также должна быть возможность выбора / отмены выбора из ViewModel.

Спасибо

1 Ответ

0 голосов
/ 11 декабря 2011

Я бы порекомендовал использовать шаблон данных для элементов списка, и в этой таблице данных у вас должна быть кнопка-флажок или флажок и т. Д. (Т. Е. Элемент управления, поддерживающий состояние).Я бы потом связал это с вашей моделью представления.Затем я бы сделал так, чтобы вы полностью обошли выбранный вами механизм в элементе управления списком.Вы можете сделать шаблоны для них своими списками просмотра, основываясь на состоянии кнопки, которое можно привязать к вашей модели представления.

Это решение, которое я предлагаю, не удивительно по сравнению с работой IsSelected, как вы ожидаете.Если вам нужна более поздняя версия, возможно, вы сможете реализовать то, что я предлагаю, в качестве нового инкапсулированного элемента управления, который делает IsSelected видимым / связываемым, как вы ожидаете.Возможно, доступные сторонние элементы управления могут поддерживать это поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...