我在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
时,列表会相应地过滤(显示抢劫)
当我输入b
时,列表会被适当过滤(显示bob)。
但是,如果我输入z
(目标列表变空),我会得到一个正确的空列表;但是从那时起List.Items.Count被设置为零。列表变空。我认为输入替换b
应该会显示Bob
,但它不会显示{{1}}。一旦我输入列表框中任何项目中未包含的文本,列表的项目就会设置为空!
我在这里遗漏了什么吗?
答案 0 :(得分:3)
我没有看到你无法消除if条件检查而只是
CollectionViewSource.GetDefaultView(list.Items).Filter =
new Predicate<object>((item) => {
string valtoCheck = item.ToString();
return valtoCheck.StartsWith(filterText,
StringComparison.CurrentCultureIgnoreCase);
});
答案 1 :(得分:0)
如果没有看到更多的周围代码,很难分辨,但这样的问题通常与刷新没有在正确的时间被调用有关。看起来您可能会反复重新分配过滤器,而不是将其设置一次并在过滤器文本更改时进行刷新。