WPF ICollectionView Filtering

江枫思渺然 提交于 2019-12-06 04:51:04

问题


I've written a code for filtering items in ComboBox:

My question is, how would you do that?

I think that this solution with reflection could be very slow..

ICollectionView view = CollectionViewSource.GetDefaultView(newValue);
view.Filter += this.FilterPredicate;


private bool FilterPredicate(object value)
{            
    if (value == null)
        return false;

    if (String.IsNullOrEmpty(SearchedText))
        return true;            

    int index = value.ToString().IndexOf(
        SearchedText,
        0,
        StringComparison.InvariantCultureIgnoreCase);

    if ( index > -1) return true;

    return FindInProperties(new string[] { "Property1", "Property2" }, value, SearchedText);
}

private bool FindInProperties(string[] properties, object value, string txtToFind)
{
    PropertyInfo info = null;
    for (int i = 0; i < properties.Length; i++)
    {
        info = value.GetType().GetProperty(properties[i]);
        if (info == null) continue;

        object s  = info.GetValue(value, null);
        if (s == null) continue;

        int index = s.ToString().IndexOf(
            txtToFind,
            0,
            StringComparison.InvariantCultureIgnoreCase);

        if (index > -1) return true;
    }
    return false;
}

回答1:


Why not just this:

ICollectionView view = CollectionViewSource.GetDefaultView(newValue);
IEqualityComparer<String> comparer = StringComparer.InvariantCultureIgnoreCase;
view.Filter = o => { 
                     Person p = o as Person; 
                     return p.FirstName.Contains(SearchedText, comparer) 
                            || p.LastName.Contains(SearchedText, comparer); 
                   }

Do you need to search properties dynamically?



来源:https://stackoverflow.com/questions/2140930/wpf-icollectionview-filtering

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!