用c#撤销绑定对象中的更改

本文关键字:对象 绑定 | 更新日期: 2023-09-27 18:02:40

在我的应用程序中,我有一个数据对象集合,这些对象定义了应用程序在执行时收集的数据类型。

用户可以打开一个对话框窗口来编辑这些对象,该对话框窗口包含绑定到集合的DataGridView实例。这意味着用户所做的任何更改都会立即应用,这是不好的。

另一个问题是,这个对话框窗口有一个取消按钮,允许用户放弃他们在打开窗口后所做的所有更改。

当前,当窗口打开时,我序列化所有对象(浅复制将不起作用),如果用户单击取消,那么我反序列化它们以恢复它们。我遇到的问题是,这很混乱。它改变了所有的引用,其中一些对象还存储了数据历史记录,这不是序列化的。然后,我必须让事件在应用程序中扩散,通知对象更新它们的引用,等等。这太痛苦了。

有没有更好的方法来解决这个问题?

用c#撤销绑定对象中的更改

一个更好的方法,使用一个被烹饪到框架中的接口- IEditable

BeginEdit
CancelEdit
EndEdit

基本思想是,当你调用BeginEdit时,你创建一个对象状态的快照。在CancelEdit上,你回滚到那个SavedState,在EndEdit上,你提交它。

当然,细节决定成败。这是一个很受欢迎的链接,它可以作为一些想法的类似SO问题的实现答案 http://www.paulstovell.com/blog/runtime-ui-binding-behavior-ieditableobject-adapter

欢呼,
Berryl

注意:这与tocco所说的在概念上没有什么不同,你应该给他答案。但是值得在一个单独的答案中说明,因为它以。net惯用的方式形式化了这个概念,并提供了更多关于有用实现的见解。此外,把这个词说成习语也很有趣:——)

您可以使用原始版本和对象的副本或整个集合的副本。
因此,您可以编辑副本并保存以执行更改或取消以保留原始对象/集合。

这样的