C# CollectionView多重过滤器

C# CollectionView多重过滤器,c#,wpf,filter,C#,Wpf,Filter,我想做一些谷歌在搜索中做的事情:如果用户写一些特殊的字符,比如-或*结果会被过滤 我现在拥有的:一个过滤器,它使用过滤对象Name属性,其中包含方法和两个特殊字符: 只留下不包含键入文本的名称- 用于搜索对象的不同属性(在我的示例中,它是单位)* 好的,我需要的是结合上面的逻辑,首先能够用“-”或“*”进行过滤,然后能够键入并继续过滤剩余的结果 我认为这都是逻辑问题,但它变得复杂了,我可能需要一些帮助 item.View.Filter = delegate(object o)

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

我现在拥有的:一个过滤器,它使用
过滤对象
Name
属性,其中包含
方法和两个特殊字符:

  • 只留下不包含键入文本的名称-

  • 用于搜索对象的不同属性(在我的示例中,它是
    单位
    )*

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

我认为这都是逻辑问题,但它变得复杂了,我可能需要一些帮助

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;
                };

使用正则表达式来分解字符串。你能更具体地说明问题的“…我可能需要一些帮助…”部分吗?你是在问如何实现链式谓词方法的字典吗?最后,我实现了我所需要的功能,将输入文本拆分为单词,然后为每个单词应用一组规则,如果满足所有条件,对象仍保留在视图中。例如,现在我可以写一些东西,比如:鲍勃-玛丽-罗伯*伦敦。