WPF中AddingNewItem事件未将项添加至ItemsSource问题排查
问题原因与解决方案
核心原因
WPF的DataGrid在触发AddingNewItem事件时,仅负责创建并在界面展示新对象,不会自动将该对象添加到绑定的ItemsSource集合中。手动通过按钮添加时,你直接操作了ObservableCollection,集合的变更通知会触发DataGrid更新;但通过DataGrid新增行时,你仅在事件中创建对象并赋值给e.NewItem,未主动将其加入Topics集合,因此ItemsSource中不会出现这个新项。
修复方案
修改AddingNewItem事件处理代码,创建新对象后主动将其添加到绑定的ObservableCollection中:
private void tblTopics_AddingNewItem(object sender, AddingNewItemEventArgs e) { Debug.WriteLine("New Topic added..."); Topic newTopic = new Topic(TopicType.NO_TYPE, "Title", "Description", DateTime.Now, "Responsible"); // 关键步骤:将新对象加入绑定的集合 Topics.Add(newTopic); // 可保留e.NewItem赋值,也可以省略,DataGrid会自动从集合获取新项 e.NewItem = newTopic; }
额外说明
如果你的Topic类有无参构造函数,可以直接移除AddingNewItem事件绑定,DataGrid会自动创建Topic实例并将其添加到绑定的ObservableCollection中,无需手动处理。只有当Topic类仅提供带参构造函数时,才需要在AddingNewItem事件中手动创建实例并加入集合。
内容的提问来源于stack exchange,提问作者Zuhlek
相关产品推荐
相关产品推荐

