ListBox CollectionViewSource.Filter方法问题

时间:2011-03-04 01:11:23

标签: wpf wpf-controls

我在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个项目:RobBobAndyJohn

当我输入Ro时,列表会相应地过滤(显示抢劫) 当我输入b时,列表会被适当过滤(显示bob)。

但是,如果我输入z(目标列表变空),我会得到一个正确的空列表;但是从那时起List.Items.Count被设置为零。列表变空。我认为输入替换b应该会显示Bob,但它不会显示{{1}}。一旦我输入列表框中任何项目中未包含的文本,列表的项目就会设置为空!

我在这里遗漏了什么吗?

2 个答案:

答案 0 :(得分:3)

我没有看到你无法消除if条件检查而只是

 CollectionViewSource.GetDefaultView(list.Items).Filter = 
        new Predicate<object>((item) => {
            string valtoCheck = item.ToString();
            return valtoCheck.StartsWith(filterText, 
                StringComparison.CurrentCultureIgnoreCase);
        });

答案 1 :(得分:0)

如果没有看到更多的周围代码,很难分辨,但这样的问题通常与刷新没有在正确的时间被调用有关。看起来您可能会反复重新分配过滤器,而不是将其设置一次并在过滤器文本更改时进行刷新。