Skip to content

Forum

Please or Register to create posts and topics.

aggiungere gestore eventi in oggetti in binding

Ciao,

in un progetto WPF VB .net framework 4.8

ho un oggetto fattura che contiene 2 observableCollection collegate in binding a 2 datagrid

observablecollection(of RigaFattura) (quantità, descrizione,prezzo,iva,totale...)

observablecollection(of RigaDettaglioIva) (aliquota,imposta,imponibile...)

nel SET delle property di RigaFattura richiamo una SUB che calcola il totale della riga e poi scatena l'evento propertychanged.

come faccio a far calcolare e aggiornare anche i valori nella observablecollection(of RigaDettaglioIva) ?

dovrei in qualche modo intercettare l'evento propertychanged( o meglio un evento creato ad hoc) delle varie RigaFattura.. ma come?

Se la riga la creo da codice faccio così:

AddHandler RigaFattura.Aggiorna, AddressOf Calcola (Aggiorna è l'evento creato ad hoc..)

ma se la riga viene aggiunta dal binding quando inserisco nuovi dati sul datagrid?

Nel set di una property richiami un metodo che scatena un evento.

Vedi la mia risposta a questo post: http://dotnetworkers.com/forum/topic/uso-di-propertychanged-e-binding/

 

 

questo lo avevo capito.. il problema è registrare il gestore dell'evento..

nel tuo codice sei tu ad instanziare la variabile mc e quindi poi le agganci il gestore del evento NChanged

miaClasse  mc = new miaClasse

mc.NChanged += N_Changed //Questa e' la registrazione all'evento NChanged da parte di un'altra classe

nel mio caso la variabile viene istanziata in automatico dal binding/datagrid quando l'utente inserisce una nuova riga di dati e quindi non so come agganciarci il gestore eventi..

ieri sera ho scoperto l'evento AddingNewItem del datagrid che viene sollevato subito prima di creare il nuovo oggetto ma e.NewItem = nothing perché l'oggetto non è stato ancora creato, quindi forse qui posso creare io l'oggetto e agganciarci il gestore??

ora non sono davanti al pc non posso fare una prova.. stasera se riesco provo...

 

Se la collection che usi in binding con la datagrid è una observable collection, la collection stessa ti solleverà un evento CollectionChanged

Vedi la documentazione sull'observable collection

Usando questo evento che personalmente non ho usato in quanto evito di usare automatismi per l'inserimento di righe nelle collection preferendo un tasto Add, (ma nel tuo caso è probabilmente opportuno fare come hai deciso tu) quindi intercettando collection changed riceverai nell'argomento dell'evento gli elementi nuovi, oppure in caso di cancellazione gli elementi vecchi e tutte le informazioni per poter agganciare gli oggetti agli event handler che ti servono.