我最近一直在研究 MVVM,在我发现Caliburn.Micro之后,事情变得非常顺利;我仍处于早期学习阶段,但我相信我对 MVVM 基础知识感觉还不错。
不过,我遇到了WPF的问题——这与我在 WinForms 中遇到DataGrid的问题几乎相同DataGridView:你到底是如何CanUserAddRows=true干净地处理网格内项目添加的?
我显然不想DataGrid在我的 ViewModel 中添加特定的 hack,因为理想情况下它应该可以重新用于其他View控件。同时,我希望能够在添加新行项时收到通知,以便我可以立即将其持久化。
我将 - 绑定DataGrid到BindableCollection<FooModel> FooItems一个干净的 MVVM 设计,如果我理解正确,我将能够处理FooItems.CollectionChanged并响应添加/删除事件。但是,DataGrid一旦添加了默认构造的项目,就会触发 Add 事件 - 这显然不是持久化对象的正确时间!
在通过 StackOverflow 进行大量谷歌搜索和挖掘之后,我得到的印象DataGrid是它如何触发 Add/Remove 事件完全迟钝。使用它的人CanUserAddRows=true似乎只在内存集合上工作,其中持久化数据的人似乎使用单独的输入字段 +按钮命令来添加新项目。
我的FooModel实现INotifyPropertyChanged但不是IEditableObject- 据我所知,这不应该是问题,因为 IEO 似乎与属性编辑/撤消有关,而我的问题是何时触发 Add 事件......
那么,您如何干净地处理网格内编辑?