aggiungere gestore eventi in oggetti in binding
Quote from Lucio_B on 27/12/2020, 14:34Ciao,
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?
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?
Quote from Miky on 29/12/2020, 08:37Nel 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/
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/
Quote from Lucio_B on 29/12/2020, 11:08questo 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...
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...
Quote from sabrina_c on 29/12/2020, 17:44Se 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.
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.