我最近一直在研究 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 事件......
那么,您如何干净地处理网格内编辑?