WinForms数据绑定和保存按钮?

5
当使用保存按钮时,C# WinForms中的数据绑定应该如何工作?我不希望在按下保存按钮之前更新数据!
我有两个表单(列表和详细信息),分别由BindingList<T>集合和我的自定义对象支持。我可以适当地将每个表单绑定到列表或对象。但是,在详细表单中进行的任何更改都会立即反映在列表表单中 - 我不想在按下保存按钮之前保存更改并更新列表中显示的详细信息。
数据绑定是否设计支持此功能?是否有常见的模式可供使用?
无论我怎么看待它,绑定似乎无法支持这种情况。我已考虑以下内容:
- 向详细表单传递对象的副本,但然后我必须在保存时对更改进行调和 - 在此期间,列表中的副本可能已经发生了更改。 - 实现IEditableObject并在保存时调用EndEdit几乎可以工作,因为我可以防止在按下保存按钮之前通知列表所做的更改,但如果其他原因导致刷新,则列表将使用中间数据进行更新。
目前,我只能放弃我的详细视图中的数据绑定,并手动完成所有操作。这相当烦人。
2个回答

4

很遗憾,数据绑定并不是为这种情况设计的。

我们找到的最佳解决方案是编辑对象克隆,然后协调更改,正如您所提到的。您可能需要想出一个自定义集合和/或对象接口,以帮助您管理此类事物。

即使克隆方法在前期稍微麻烦一些,但与使用IEditableObject尝试捕获更新数据的所有可能事件相比,它将会更加简单明了且不易出错。而且,这是一种更直接的方法,您不会陷入混乱的代码中。


0
如果您决定使用绑定列表,最好的选择是实现IBindingList接口以创建所需的功能。也可能通过从BindingList继承并覆盖适当的方法来改变绑定列表的行为来实现此目标。

http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglist.aspx

如果您不一定要使用绑定列表,最好根据控件的事件手动进行数据操作。

祝您好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接