绑定到IEditableObject时,在WPF中遇到错误是否很常见?

时间:2018-07-17 14:25:31

标签: c# wpf mvvm

我经常使用WPF将数据网格绑定到IEditableObject的集合。几乎每次我这样做时,我都会后悔。有没有潜规则可以避免在我的视图模型中完全实现 IEditableObject

我注意到的最新问题是内存泄漏。一些关键的内部组件(DataBindEngine,CommitManager,BindingGroup)正在一起协调根内存引用。如果用户在意外的时刻关闭数据输入窗口(例如,在BeginEdit之后,如果用户从不进行触发“ CancelEdit”或“ CommitEdit”的调用的操作),这似乎正在发生。扎根发生在数据绑定引擎中非常隐蔽的地方,似乎很难控制该级别的默认行为(除了确保我没有在我的任何人中实现 IEditableObject 视图模型)。

不幸的是,避免IEditableObject实现并不总是那么容易。例如,当绑定到ADO.Net时,数据网格希望对单个记录使用BindingListCollectionView(用于集合)和DataRowView类。由于DataRowView类实现了IEditableObject,因此似乎没有任何方法可以轻松地放弃相关的错误。我希望有一种方法可以告诉WPF数据网格忽略 IEditableObject的实现,并假装未实现。

总的来说,我想知道是否应该避免绑定到IEditableObject(并且根据该规则,我们也应该避免直接绑定到ADO.Net)。这样做似乎有很多陷阱,而且我听说WPF开发人员正在贬低ADO.Net。但是我从未见过Microsoft在此问题上提供任何正式或权威性的指导。

PS。除了我的数据绑定中的内存泄漏之外,这里还有一些其他示例,它们说明了绑定到IEditableObject时可能遇到的各种类型的问题。

  • 后期绑定更新出现意外问题

https://social.msdn.microsoft.com/Forums/vstudio/en-US/d48ccbca-6a3c-4aea-9875-4862fc4a49b9/wpf-datagrid-validate-cell-when-leave?forum=wpf

  • IEditableObject与BindingGroup冲突(两者均尝试投放 相似的目的)

https://social.msdn.microsoft.com/Forums/vstudio/en-US/7f7196b8-b9dc-487d-93cd-e77f5b3d9906/confused-about-transactional-editing-edititemcanceledit?forum=wpf

  • IEditableObject协议问题(由于目标重叠) BindingGroup类)

WPF DataGrid calls BeginEdit on an IEditableObject two times?

潜在的修正(用户语音提示): 理想情况下,WPF数据网格将具有允许我们禁用IEditableObject的所有专门处理的属性。无论视图模型是否实现了该接口,这都将允许数据网格以一致的方式工作。我发现了有关在数据网格中使BindingGroup功能“可选”的用户声音想法。我想这可能是解决方案的一部分,但是这个想法被拒绝了。 https://wpdev.uservoice.com/forums/427690-windows-presentation-foundation-wpf/suggestions/6736492-make-internal-use-of-bindinggroup-in-datagrid-opti

0 个答案:

没有答案