c# - WPF ListView 项目筛选器 - 刷新项目后未触发筛选器
问题描述
我正在尝试将过滤器添加到我的 ListView。过滤器依赖于来自 TextBox 的输入。我正在向 ListView 添加一个过滤器,并在 TextBox 输入发生更改时触发刷新。我的问题:过滤方法只被调用一次。
我有的:
我在 XAML 文件中有一个 ListView。
<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。
我的过滤器:
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
它总是有过滤器对象。
解决方案
推荐阅读
- ios - 无法使用 NSKeyedArchiver 保存我的模型
- deep-learning - 张量板的准确度/训练和损失/训练图
- php - 在 htcaccess 中重写 URL
- php - Web API 发送的数据没有价值
- firebase - 即使我修改了某些字段,我如何才能从 Firestore 中仅获取一次数据?
- javascript - 使用Angular中的下拉菜单显示/隐藏div元素?
- anaconda - 中途取消创建conda venv,现在找不到安装的包了?
- elasticsearch - Elasticsearch 货币转换和搜索处理?
- wordpress - WordPress 查询组按 post_types
- python - 如何知道我的标签在 python 的混淆矩阵中正确排列?