CollectionView多个过滤器

时间:2013-07-27 11:14:42

标签: c# wpf filter

我想做谷歌在搜索中做的事情:如果用户写了一些特殊字符,比如 - 或*结果被过滤。

我现在拥有的内容:使用Name方法过滤对象Contains属性的过滤器,以及两个特殊字符:

  • 仅保留不包含键入文本的名称 -

  • 用于搜索我的对象的不同属性(在我的情况下是Units)*

好的,我需要的是结合上面的逻辑,并能够先用“ - ”或“*”过滤,然后能够键入并继续过滤剩余的结果。

这就是我认为的逻辑,但它变得越来越复杂,我可能需要一些帮助。

item.View.Filter = delegate(object o)
            {
                //Lógica de filtrado

                if ((item.FilterText.Length > 0) && ((item.FilterText[0] == '*') || (item.FilterText[0] == '-')))
                {
                    //If the first char is *
                    if ((item.FilterText[0] == '*')
                        && (((MyObject)o).Units[0].ToString().ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))
                            || ((MyObject)o).Units[1].ToString().ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))))


                {
                        return true;
                    }

                    //If the first char is -
                    if ((item.FilterText[0] == '-')
                        && (!((MyObject)o).Name.ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))
                            || !((MyObject)o).Name.ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture).Substring(1))))


                 {
                        return true;
                 }

                }
                else
                {
                    if (((MyObject)o).Name.ToUpper(CultureInfo.InvariantCulture)
.Contains(item.FilterText.ToUpper(CultureInfo.InvariantCulture)))
                        {
                            return true;
                        }
                    }
                    return false;
                };

0 个答案:

没有答案