Bindingsource 没有暂停绑定
Bindingsource is not suspending binding
我有一个显示自定义详细信息的表单,其中一部分是与客户关联的银行帐户列表。此列表绑定到它自己的绑定源,因此在加载客户时我会这样做:
bsCustomer.DataSource = customer;
bsCustomerAccounts.DataSource = customer.Accounts;
我有一个绑定到 bsCustomerAccounts
的 ObjectListView。到目前为止一切正常。
要编辑特定帐户,我双击它并打开一个单独的表格:
using (var form = new CustomerAccountForm(selectedAccount))
{
DialogResult result = form.ShowDialog(this);
if (result == DialogResult.OK)
{
selectedAccount= form.Account;
}
}
问题是当用户单击 Cancel
取消对此表单中帐户的编辑时。原来的 bcCustomerAccounts
,因此列表仍在更新中。
我已尝试 SuspendBinding
和 RaiseListChangedEvents = false
但绑定源仍在更新中。
我是不是漏掉了什么?
乍一看真的很奇怪,你想虽然你没有将编辑的对象分配回列表,但为什么列表项被编辑了?
关键点在这里:类是Reference Type。
您将选定的帐户传递给了编辑表单,因为它是 class 并且 class 是引用类型,实际上您正在编辑列表中的同一个实例。因此,当您编辑属性时,无论单击“确定”还是“取消”,所有编辑都会直接应用于对象。
我有一个显示自定义详细信息的表单,其中一部分是与客户关联的银行帐户列表。此列表绑定到它自己的绑定源,因此在加载客户时我会这样做:
bsCustomer.DataSource = customer;
bsCustomerAccounts.DataSource = customer.Accounts;
我有一个绑定到 bsCustomerAccounts
的 ObjectListView。到目前为止一切正常。
要编辑特定帐户,我双击它并打开一个单独的表格:
using (var form = new CustomerAccountForm(selectedAccount))
{
DialogResult result = form.ShowDialog(this);
if (result == DialogResult.OK)
{
selectedAccount= form.Account;
}
}
问题是当用户单击 Cancel
取消对此表单中帐户的编辑时。原来的 bcCustomerAccounts
,因此列表仍在更新中。
我已尝试 SuspendBinding
和 RaiseListChangedEvents = false
但绑定源仍在更新中。
我是不是漏掉了什么?
乍一看真的很奇怪,你想虽然你没有将编辑的对象分配回列表,但为什么列表项被编辑了?
关键点在这里:类是Reference Type。
您将选定的帐户传递给了编辑表单,因为它是 class 并且 class 是引用类型,实际上您正在编辑列表中的同一个实例。因此,当您编辑属性时,无论单击“确定”还是“取消”,所有编辑都会直接应用于对象。