C#过滤ListView而不设置ItemSource new

时间:2016-12-19 11:05:33

标签: c# listview filter

我想知道是否可以在C#中过滤ListView而无需设置不同的ItemSource

现在,每次条件发生变化时,我都会设置一个新的ItemsSource

ListView.ItemsSource = list.Where(item => {<<condition>>});

我的问题:在此列表中,我有包含图片的用户个人资料。每次我设置一个新的ItemSource时,都会重新加载图片。是否可以在android中使用类似过滤器的东西来“隐藏”不符合上述条件的行?

1 个答案:

答案 0 :(得分:0)

您可以避免实际更改ItemsSource,而是添加或删除设置为ItemsSource的ObservableCollection中的项目。列表控件将选择与这些插入和删除相关的ObservableCollection事件并根据需要进行更新。

e.g。以下函数应根据筛选表达式从完整列表中填充筛选列表。如果筛选的列表绑定到列表控件,那么只调用此函数应具有所需的效果。

static void FilterList<T>(List<T> masterList, ObservableCollection<T> filteredList, Func<T, bool> filterExpression)
{
    foreach (var item in masterList)
    {
        if (filterExpression(item))
        {
            if (!filteredList.Contains(item))
            {
                filteredList.Add(item);
            }
        }
        else
        {
            if (filteredList.Contains(item))
            {
                filteredList.Remove(item);
            }
        }
    }
}

e.g。

  

FilterList(allCars,filteredCars,(user)=&gt; user.Age&gt; = 50);

请注意,此函数可能需要额外的逻辑来保留排序,而不是总是在最后添加新的过滤项。