Фильтр элементов WPF ListView - фильтр не запускается после обновления элементов - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь добавить фильтр в свой ListView.Фильтр зависит от ввода из TextBox.Я добавляю фильтр в ListView и запускаю обновление, если ввод TextBox изменяется.Моя проблема: метод фильтра вызывается только один раз.

Что у меня есть:

Я получил ListView в файле XAML.

<TextBox Grid.Row="0" x:Name="textBoxGroupLayers" FontSize="14" TextChanged="textBoxGroupLayers_TextChanged"/>
<ListView Grid.Row="1" x:Name="listViewGroupLayers" FontSize="14" />

Я добавляю элементык ListView через

listViewGroupLayers.Items.Add(itemToAdd);

Я добавляю фильтр:

this.listViewGroupLayers.Items.Filter = UserFilter;

Примечание: listViewGroupLayers - это ListView и listViewGroupLayers.Items - это ItemCollection.

MyФильтр:

       private bool UserFilter(object item)
    {
        if (String.IsNullOrEmpty(this.textBoxGroupLayers.Text))
        {
            return true;
        }
        else
        {
            MyObject myObject = (item as ListViewItem).Tag as MyObject;
            if (myObject == null)
            {
                 return true;
            }
            bool itemShouldBeVisible = myObject.Name.IndexOf(this.textBoxGroupLayers.Text, StringComparison.OrdinalIgnoreCase) >= 0;
            return itemShouldBeVisible;
        }
    }

Обновление:

        private void textBoxGroupLayers_TextChanged(object sender, TextChangedEventArgs e)
    { 
        this.listViewGroupLayers.Items.Refresh();     
    }

Теперь происходит следующее: я установил точку останова в UserFilter.Если я наберу первую букву в TextBox, точка останова будет активна, и фильтр работает нормально.Но если я сейчас наберу вторую букву, фильтр не будет вызван.

Если я просто сделаю следующее, все будет отлично работать:

        private void textBoxGroupLayers_TextChanged(object sender, TextChangedEventArgs e)
    { 
        this.listViewGroupLayers.Items.Filter = UserFilter;     
    }

Но мне это кажется довольно грязным.Мой вопрос: почему фильтр не работает после первого вызова?Я проверил экземпляр this.listViewGroupLayers.Items, и он всегда имеет объект фильтра.

...