Bindingsource non sospende l’associazione

Ho un modulo che visualizza i dettagli personalizzati, una sezione è un elenco di conti bancari associati al cliente. Questa lista è vincasting alla propria bindingsource, quindi quando carico un cliente lo faccio:

bsCustomer.DataSource = customer; bsCustomerAccounts.DataSource = customer.Accounts; 

Ho un ObjectListView associato a bsCustomerAccounts . Finora tutto funziona bene.

Per modificare un determinato account, faccio doppio clic su di esso e apro un modulo separato:

 using (var form = new CustomerAccountForm(selectedAccount)) { DialogResult result = form.ShowDialog(this); if (result == DialogResult.OK) { selectedAccount= form.Account; } } 

Il problema è quando l’utente fa clic su Cancel per annullare la modifica dell’account in questo modulo. I bcCustomerAccounts originali e quindi l’elenco sono ancora in fase di aggiornamento.

Ho provato SuspendBinding e RaiseListChangedEvents = false ma il bindingsource è ancora in fase di aggiornamento.

Mi sto perdendo qualcosa?

All’inizio sembra davvero sorprendente, pensi che mentre non hai assegnato l’object modificato alla lista, perché la voce della lista è stata modificata?

Il punto chiave è qui: le classi sono di riferimento .

Hai passato l’account selezionato al modulo di modifica e poiché si tratta di una class e le classi sono di tipo di riferimento, infatti stai modificando la stessa istanza che si trova nell’elenco. Pertanto, quando si modificano le proprietà, tutte le modifiche vengono applicate direttamente all’object, indipendentemente dal fatto che faccia clic su OK o Annulla.