当你有一个保存按钮时,C#WinForms中的数据绑定应该如何工作?我不希望数据更新,直到我按下保存!
我有两个表单(列表和详细信息),分别由BindingList<T>
集合和该集合中的自定义对象支持。我可以适当地将每个表单绑定到列表或对象。但是,详细信息表单中的任何更改都会立即反映在列表表单中 - 我不想保存更改并更新列表中显示的详细信息,直到按下“保存”按钮。
数据绑定是否旨在支持此功能?这样做有共同的模式吗?
无论我怎样看待它,绑定似乎都无法支持这种情况。我考虑过以下几点:
将对象的克隆传递给详细信息表单,但是我必须在Save上协调更改 - 同时可能已对列表中的副本进行了更改。
实施IEditableObject
并在保存时调用EndEdit
几乎可以正常工作,因为我可以阻止列表收到通知,直到按下保存所做的更改,但如果其他原因导致刷新列表是更新了临时数据。
我目前在详细视图中不再使用数据绑定,而是手动完成所有操作。这很烦人。
答案 0 :(得分:4)
遗憾的是,数据绑定并非专为此类设计而设计。
我们在这里找到的最佳解决方案是编辑对象克隆,然后如您所述,协调更改。您可能想要提供一个自定义集合和/或对象界面,以帮助您管理此类事物。
即使克隆方法稍微提前一些工作,与使用IEditableObject
尝试捕获更新数据的所有可能事件相比,它也会变得更加复杂和令人沮丧。不仅如此,这是一种更直接的方法,你最终不会得到意大利面条代码。
答案 1 :(得分:0)
如果你开始使用绑定列表,最好的办法是实现IBindingList来创建你想要的功能。也可以通过简单地继承BindingList并覆盖适当的方法来改变绑定列表的行为来解决这个问题。
http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglist.aspx
如果您没有设置使用绑定列表,最好根据控件的事件手动执行数据操作。
祝你好运。