DataBound ListView Multi-Select и фильтрация - PullRequest
0 голосов
/ 12 января 2012

У меня есть список элементов с привязкой к данным.

У меня есть текстовое поле, которое фильтрует их на лету, связывая их видимость с тем, содержит ли описание напечатанный текст.Это также связано со свойством 'focusable' для удаления выбранных элементов, которые не видны из-за фильтра.

DataTrigger для ListBoxItems:

            <DataTrigger Value="False">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource filterToBoolean}">
                        <Binding Path="Description" />
                        <Binding ElementName="txtFilter" Path="Text" />
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="Visibility" Value="Collapsed" />
                <Setter Property="Focusable" Value="False" />
            </DataTrigger>

Моя проблема отображается вследующий сценарий.Скажем, у нас есть три элемента (Джо, Боб, Джейкоб).

Если мы введем «J» в фильтре, а затем выберем «Джо» и Shift + клик «Джейкоб», будет выбрано три элементаих), хотя «Боб» не видно.То же самое применимо, если все три были выбраны до применения фильтра.

Я нашел здесь пример, который пытается это исправить, но он не работает полностью.Он будет применяться, если элементы будут выбраны до применения фильтра, но, если он будет выбран позже, возникнет та же проблема.

Заранее благодарен за любую помощь здесь.

1 Ответ

2 голосов
/ 12 января 2012

ListView создаст ListViewItem для каждого объекта в вашей коллекции.Тот факт, что видимость установлена ​​на скрытый, не означает, что элемент отсутствует в списке.Когда вы нажимаете Shift-Select, он выбирает все элементы между двумя, включая «Боб» (видимый или нет).

Для правильной фильтрации коллекции вы должны использовать атрибут Filter CollectionViewSource.Примером того, как это можно сделать, является принятый ответ на этот вопрос: Фильтр триггеров на CollectionViewSource

Редактировать

Существует множество причинВаша фильтрация может быть медленной.В этом вопросе есть несколько советов, которые вы можете проверить: WPF ICollectionView.filter с большими наборами данных

Если это не поможет, возможно, задайте другой вопрос по SO (вы должны предоставить кодо том, как вы делаете фильтрацию и привязку данных в виде списка).

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