C #: Как эффективно фильтровать (скрывать) элементы ListView в виртуальном режиме? - PullRequest
3 голосов
/ 11 июня 2009

C #: Как эффективно фильтровать (скрывать) элементы ListView в виртуальном режиме?

Я ищу способ фильтровать (скрывать / показывать) элементы в ListView в виртуальном режиме. Мои элементы кэшируются в массиве элементов списка, как я могу эффективно сделать так, чтобы при нажатии кнопки фильтра отображались только определенные элементы списка, а затем все они возвращались при нажатии кнопки без фильтра?

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Вам необходимо отобразить список видимых строк, чтобы когда RetrieveVirtualItem запрашивал элемент, он запрашивал ваш отфильтрованный список, содержащий только видимые элементы.

Если вы используете CacheVirtualItems для хранения ListViewItems, вам потребуется обновить этот кеш при применении фильтрации, удалив все невидимые строки. Вы можете просто очистить кеш в этой точке, чтобы уменьшить сложность.

0 голосов
/ 24 июня 2012

Я сделал это в своем проекте, добавив свойство FilterResult к объектам, которые я показывал в ListView. Затем в шаблоне элемента, используемого для ListView, я поместил DataTrigger в FilterResult, с Setter on Visibility, что-то вроде:

<DataTrigger Binding="{Binding FilterResult}" Value="False">
           <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>

Затем, когда пользователь меняет фильтр, я просто просматриваю коллекцию, обновляю каждый FilterResult (который является свойством PropertyChanged Notifying) и вуаля! : =)

Другим решением, все еще использующим флаг FilterResult, было бы создание NotifyingCollection, подключенной к вашей основной Коллекции, которая выставляет только элементы, имеющие FilterResult в качестве true. Следовательно, вы должны управлять событиями CollectionChanged, если одно значение переключателя элемента FilterResult ...

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