我的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)
答案 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))));
您可以根据需要进行调整。