ListBox CollectionViewSource.Filter方法问题

我有一个在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
但它没有;一旦我输入列表框中任何项目中未包含的文本,列表的项目就会设置为空! 我在这里错过了什么吗?     
已邀请:
我没有看到你不能消除if条件检查,只是有
 CollectionViewSource.GetDefaultView(list.Items).Filter = 
        new Predicate<object>((item) => {
            string valtoCheck = item.ToString();
            return valtoCheck.StartsWith(filterText, 
                StringComparison.CurrentCultureIgnoreCase);
        });
    
如果没有看到更多的周围代码,很难分辨,但这样的问题通常与刷新没有在正确的时间被调用有关。看起来您可能会反复重新分配过滤器,而不是将其设置一次,并在过滤器文本更改时进行刷新。     

要回复问题请先登录注册