Bindingsource不是挂起绑定

本文关键字:绑定 挂起 Bindingsource | 更新日期: 2023-09-27 17:54:48

我有一个显示自定义详细信息的表单,其中一部分是与客户关联的银行账户列表。这个列表被绑定到它自己的绑定源,所以当加载客户时,我这样做:

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,因此列表仍在更新中。

我已经尝试了SuspendBindingRaiseListChangedEvents = false,但绑定源仍在更新中。

我错过了什么吗?

Bindingsource不是挂起绑定

乍一看真的很奇怪,你会想,虽然你没有把编辑过的对象赋值给列表,但为什么列表项会被编辑?

关键在于:类是引用类型。

您将选定的帐户传递给编辑表单,因为它是一个类,而类是引用类型,实际上您正在编辑列表中相同的实例。因此,当你编辑属性时,所有的编辑都直接应用于对象,而不管点击确定或取消。