根据多个条件筛选CollectionView

时间:2015-05-04 15:19:29

标签: c# wpf

我的WPF应用程序带有搜索文本框,Listview绑定到ICollectionView。我可以根据texbox值过滤ICollectionView,但是我有兴趣通过传递用逗号分隔的多个值来扩展功能,并将多个过滤应用于集合。

 var filterStrings= TextBoxValue.Split(',');

 MyCollectionView.Filter = m => 
     (((MyObject)m).myProperty.ToLower().ContainsAll(filterStrings) 

其中ContainsAll是Extension

 public static bool ContainsAll(this string source, params string[] values)
 {
      return values.All(x => source.Contains(x));
 }

过滤器不包含多个结果,任何想法为什么?谢谢

修改

该集合具有简单的字符串值(Bob,Bin,Gray,Fin,Fantastic,Shell),我想提供一个过滤器,例如: (B,F)并且具有上述值的结果(Bob,Bin,Fin,Fantastic)

2 个答案:

答案 0 :(得分:2)

在这种情况下.All表示:它也包含B和F(和条件)

但您需要.Any(或条件)

public static bool ContainsAll(this string source, params string[] values)
{
    return values.Any(x => source.Contains(x));
}

答案 1 :(得分:1)

我不确定它是否最佳,但确实有效:

string[] collection = new string[] {"Bob", "Bin", "Grey", "Fin", "Fantastic", "Shell" };
string filter = "B,F"; // TextBoxValue
string[] filterStrings = filter.Split(',');
string results = string.Join(",", collection.Where(c => filterStrings.Any(f => c.Contains(f))));

您可以根据需要进行调整。