You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中ListView仅更新变更列表项的实现方案

.NET MAUI ListView + SwipeView 局部刷新问题解决

问题场景

在.NET MAUI项目中,我实现了嵌套SwipeView的ListView:每个列表项会根据绑定的IsSelected属性(ViewModel在项被选中时将其设为True)控制LeftItems或RightItems的显示状态。最初通过通知整个ItemsSource变更来更新视图,效率极低,因此希望实现仅刷新属性发生变更的列表项。

问题根源排查

补充代码后发现问题所在:ViewModel中的Coins属性返回的是ObservableCollection的子集(比如通过Linq筛选生成的新集合),而非原ObservableCollection对象。这导致单个项的属性变更时,INotifyPropertyChanged无法正确触发视图局部更新——因为绑定的集合实例已替换,视图无法感知内部项的属性变化。

解决方法

将Coins属性改为直接返回原ObservableCollection实例:

// 修正前(返回子集)
public ObservableCollection<Coin> Coins => new ObservableCollection<Coin>(_originalCoins.Where(c => c.IsActive));

// 修正后(返回原集合)
public ObservableCollection<Coin> Coins => _originalCoins;

调整后,当集合中单个项的IsSelected属性变更并触发PropertyChanged事件时,ListView会自动定位对应项进行局部刷新,无需更新整个ItemsSource,有效提升了更新效率。


内容的提问来源于stack exchange,提问作者Statistik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:42:03