Вопрос метода ListBox CollectionViewSource.Filter - PullRequest
1 голос
/ 04 марта 2011

У меня есть список, определенный в XAML, и я фильтрую его элементы, используя следующий код из текста, полученного из текстового поля:

if (list.Items.Count > 0)
{
    CollectionViewSource.GetDefaultView(list.Items).Filter = 
        new Predicate<object>((item) => {
            string valtoCheck = item.ToString();
            return valtoCheck.StartsWith(filterText, 
                StringComparison.CurrentCultureIgnoreCase);
        });
}

Все работает отлично, за исключением случая, когда фильтр не находит подходящих элементовкритерии.

отл.Допустим, у меня есть 4 пункта в списке: Rob, Bob, Andy, John.

Когда я ввожу Ro, список фильтруется соответствующим образом (показывает rob).
Когда я ввожу b, список фильтруется соответствующим образом (показывает bob).

Однако, если я введу z (целевой список станет пустым), я получу пустой список, который является правильным;но затем List.Items.Count устанавливается в ноль с этого момента.Список становится пустым.Я хотел бы предположить, что ввод замены b должен показать мне Bob, но это не так;элементы списка становятся пустыми, как только я ввожу текст, который не содержится ни в одном из элементов списка!

Я что-то здесь упускаю?

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Я не вижу, что вы не можете отменить проверку условия if и просто иметь

 CollectionViewSource.GetDefaultView(list.Items).Filter = 
        new Predicate<object>((item) => {
            string valtoCheck = item.ToString();
            return valtoCheck.StartsWith(filterText, 
                StringComparison.CurrentCultureIgnoreCase);
        });
0 голосов
/ 04 марта 2011

Трудно сказать, не видя больше окружающего кода, но подобные проблемы обычно связаны с тем, что Refresh не вызывается в нужное время.Похоже, что вы, возможно, переназначаете фильтр снова и снова, а не устанавливаете его один раз и обновляете при изменении текста фильтра.

...