Я пытаюсь добавить фильтр в свой 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
, и он всегда имеет объект фильтра.