Xamarin中如何筛选集合并将处理后结果绑定到ListView展示
解决方案
你可以通过LINQ查询或者修改原有循环逻辑两种方式实现筛选需求,具体修改如下:
前置准备
如果使用LINQ方案,需要先在代码文件顶部引入对应命名空间:
using System.Linq;
方案1:LINQ简洁写法(推荐)
直接对传入的arg集合做筛选和字段映射,替换原有直接赋值lstLevel2.ItemsSource = arg;的逻辑即可:
public void MarkerPressed2() { MessagingCenter.Subscribe<object, IEnumerable<AlertLevelOnClick>>(this, "PinInfo", (sender, arg) => { // 筛选levelForecastOnClick等于1的条目,仅保留需要的两个字段 var filteredData = arg.Where(item => item.levelForecastOnClick == 1) .Select(item => new AlertLevelOnClick { dateForecastOnClick = item.dateForecastOnClick, levelForecastOnClick = item.levelForecastOnClick }) .ToList(); // 将筛选后的集合赋值给ListView lstLevel2.ItemsSource = filteredData; }); }
方案2:基于你原有循环逻辑修改
如果你不想引入LINQ,也可以调整原有循环的判断逻辑,仅把符合条件的条目加入结果集合:
public void MarkerPressed2() { MessagingCenter.Subscribe<object, IEnumerable<AlertLevelOnClick>>(this, "PinInfo", (sender, arg) => { var listAlert = new List<AlertLevelOnClick>(); foreach (var item in arg) { // 仅保留levelForecastOnClick等于1的条目 if (item.levelForecastOnClick == 1) { var currentData = new AlertLevelOnClick() { dateForecastOnClick = item.dateForecastOnClick, levelForecastOnClick = item.levelForecastOnClick }; listAlert.Add(currentData); } } // 把筛选后的集合赋值给ListView lstLevel2.ItemsSource = listAlert; }); }
补充说明
- 如果你后续需要切换筛选条件为level等于2,只要把判断条件里的
== 1改成== 2即可 - 两种方案都只会保留你需要的
dateForecastOnClick和levelForecastOnClick两个字段,符合展示需求
内容的提问来源于stack exchange,提问作者Blagovest Pizhev
相关产品推荐
相关产品推荐

