ListView绑定List后添加元素不更新的问题求助
解决WPF ListView绑定List后添加元素不更新的问题
嗨,这个问题我之前踩过坑!核心原因很简单:你用的List<Item>并没有实现WPF绑定系统需要的集合变更通知接口,所以当你往List里加元素时,ListView根本不知道集合发生了变化,自然不会更新UI。
问题根源
WPF的绑定机制依赖INotifyCollectionChanged接口来跟踪集合的增减、修改操作。而List<T>只是一个基础的集合容器,它不会在集合内容变化时主动触发任何通知事件,绑定系统也就无法感知到需要刷新ListView。
解决方案:改用ObservableCollection
WPF专门提供了ObservableCollection<T>类,它内置实现了INotifyCollectionChanged接口,集合有任何变更(添加、删除、移动元素)都会自动通知绑定系统更新UI。
修改后的C#代码:
// 别忘了导入这个命名空间,否则找不到ObservableCollection using System.Collections.ObjectModel; public ItemEditor() { InitializeComponent(); ListView_Item.ItemsSource = TestList; } // 把List替换成ObservableCollection ObservableCollection<Item> TestList = new ObservableCollection<Item>(); private void MenuItem_AddNewItem_Click(object sender, RoutedEventArgs e) { Item newItem = new Item(); newItem.Name = "new item"; TestList.Add(newItem); // 现在添加元素时会自动通知UI更新 }
额外提示
如果后续你需要修改Item对象的属性(比如修改Name)时,UI也能同步更新,那还需要让Item类实现INotifyPropertyChanged接口,在属性值变化时触发PropertyChanged事件。不过当前你的问题只涉及集合元素添加,上面的修改已经足够解决问题了。
内容的提问来源于stack exchange,提问作者martinrhan
相关产品推荐
相关产品推荐

