WPF DataGrid能否更新行并重新显示?添加元素异常咨询
解决WPF DataGrid绑定集合后新增元素不显示的问题
这问题我之前开发WPF项目时也踩过坑!核心原因很直白:你用的List<Action>没办法主动通知UI层集合发生了变化。DataGrid在初始绑定的时候会读取集合的当前内容,但之后往List里新增、删除元素,它完全感知不到这些变化,自然不会更新显示。
直接解决方案:换成ObservableCollection<T>
ObservableCollection<T>是WPF专门为数据绑定设计的集合类型,它实现了INotifyCollectionChanged接口——当集合里的元素新增、移除或者排序变动时,会自动触发事件通知UI刷新。
修改你的代码只需两步:
- 先引入对应的命名空间:
using System.Collections.ObjectModel; - 把原来的
List<Action>替换成ObservableCollection<Action>:public partial class MainWindow : Window { public DateTime start; public DateTime end; // 替换为支持变更通知的ObservableCollection public ObservableCollection<Action> zadania = new ObservableCollection<Action>(); public MainWindow() { InitializeComponent(); var urlop = new Action(); // 初始化添加元素的逻辑保持不变 zadania.Add(urlop); // ...其他初始化代码 } // 后续添加元素的方法里,直接调用Add即可自动更新UI private void AddNewAction() { var newAction = new Action(); zadania.Add(newAction); // 这时候DataGrid会自动显示新添加的元素 } }
额外小提醒
如果之后你需要让DataGrid自动同步Action对象内部属性的变化(比如修改某个属性后UI跟着刷新),那你的Action类还需要实现INotifyPropertyChanged接口——不过这是属性变更通知的场景,和你当前遇到的集合新增元素不显示问题是两回事啦。
内容的提问来源于stack exchange,提问作者Karol Pisarzewski
相关产品推荐
相关产品推荐

