.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
相关产品推荐
相关产品推荐

