Avalonia中更新ObservableCollection无法触发UI更新的解决咨询
解决Avalonia中ObservableCollection项属性修改不触发UI更新的问题
问题核心在于你的FolderInfo类没有实现INotifyPropertyChanged接口。ObservableCollection仅会在集合本身发生增删改操作(如添加、移除项)时触发CollectionChanged通知UI,但集合内对象的属性变化,需要对象自身通过INotifyPropertyChanged来告知UI。
解决方案:让FolderInfo实现INotifyPropertyChanged
修改FolderInfo类,实现接口并在属性变更时触发事件:
using System.ComponentModel; using System.Runtime.CompilerServices; public class FolderInfo : INotifyPropertyChanged { private int _random; public int Random { get => _random; set { if (_random != value) { _random = value; OnPropertyChanged(); } } } // 其他属性(如FolderName)也需要按此方式修改,确保属性变更时触发通知 public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
验证修改后的操作
现在你最初的修改方式就能正常触发UI更新了:
public void RefreshSingleItem(FolderInfo folderInfo) { Dispatcher.UIThread.Post(() => { var folder = Folders.FirstOrDefault(f => f.FolderName == folderInfo.FolderName); if (folder != null) // 加空判断避免空引用异常 { folder.Random = rnd.Next(); } }); }
为什么之前的添加项操作能生效?
当你向ObservableCollection添加新的folderInfo时,集合触发了CollectionChanged事件,UI会重新绑定这个新项的所有属性,所以能看到Random的更新。但修改现有项时,没有属性变更通知,UI无法感知到属性值的变化,因此不会刷新。
内容的提问来源于stack exchange,提问作者Ole Albers
相关产品推荐
相关产品推荐

