gpt4 book ai didi

c# - WPF 数据网格 : handling CanUserAddRows=true cleanly with MVVM

转载 作者:行者123 更新时间:2023-12-03 10:30:40 24 4
gpt4 key购买 nike

我最近一直在研究 MVVM,在我发现 Caliburn.Micro 之后事情进展顺利;我仍处于早期学习阶段,但我相信我对 MVVM 基础知识感觉还不错。

我遇到了 WPF DataGrid 的问题, 不过 - 它几乎是 same issues我使用 WinForms DataGridView : 你到底是怎么处理的CanUserAddRows=true网格内的项目是否添加干净?

我显然不想添加 DataGrid - 对我的 ViewModel 的特定 hack,因为理想情况下它应该可以重新用于其他 View控制。同时,我希望能够在添加新行项目时收到通知,以便我可以立即将其持久化。

我正在绑定(bind) DataGridBindableCollection<FooModel> FooItems - 使用干净的 MVVM 设计,如果我理解正确,我将能够处理 FooItems.CollectionChanged并对添加/删除事件使用react。但是,DataGrid添加默认构造的项目后立即触发 Add 事件 - 这显然是 不是 坚持对象的正确时机!

在通过 StackOverflow 大量搜索和挖掘之后,我得到的印象是 DataGrid在触发 Add/Remove 事件方面完全迟缓。与 CanUserAddRows=true 一起使用的人似乎只适用于内存集合,其中持久化数据的人似乎使用单独的输入字段 + 按钮命令来添加新项目。

我的 FooModel实现 INotifyPropertyChanged但不是 IEditableObject - 据我所知,这不应该是问题,因为 IEO 似乎与属性编辑/撤消有关,而我的问题是何时触发 Add 事件......

那么,如何处理网格内编辑 干净利落 ?

最佳答案

听起来像 WPF DataGrid行为方式与 WinForms DataGridView 非常相似,因为一旦用户开始进入“新行”,它就会在数据源中创建一个项目。随后的编辑将导致集合中新项目的属性发生变化。

如果您使用 BindingList<FooModel>相反,您会收到名为 ListChanged 的附加事件- 提供您的FooModel类型实现 INotifyPropertyChanged ,当项目的属性发生变化时(以及从集合中添加/删除项目),该事件将触发。

希望这可以帮助!

关于c# - WPF 数据网格 : handling CanUserAddRows=true cleanly with MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com