我想知道是否可以在C#中过滤ListView
而无需设置不同的ItemSource
。
现在,每次条件发生变化时,我都会设置一个新的ItemsSource
:
ListView.ItemsSource = list.Where(item => {<<condition>>});
我的问题:在此列表中,我有包含图片的用户个人资料。每次我设置一个新的ItemSource时,都会重新加载图片。是否可以在android中使用类似过滤器的东西来“隐藏”不符合上述条件的行?
答案 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);
请注意,此函数可能需要额外的逻辑来保留排序,而不是总是在最后添加新的过滤项。