示例#1
0
        protected override void InsertItem(int index, T item)
        {
            string serialItem = ""; bool esitoSerial;

            esitoSerial = Serialize.SerializeInText(item, ref serialItem);

            var args = new BindListEventArgs(index, item); //ATTENZIONE:scateno l'evento BeforeInsertItem prima del MyBase.InsertItem(index, item), che ha sua volta scatena lo stesso evento nella classe da cui derivo...

            BeforeInsertItem?.Invoke(this, args);          //in caso di sottoscrizione dell'evento, verrà comunque intercettato(correttamente) solomente 1 volta l'evento di questa classe e non quello da cui derivo
            if (args.interrompiOperazione == true)
            {
                return;
            }

            if (esitoSerial == false || defaultValueOfNewT == serialItem) //Si verifica quando il DataGrid aggiunge un item vuoto alla lista
            {                                                             //Aggiunto da dataGrid poichè ha valori di default (non è sicuro al 100% ma molto probabile), quindi non faccio il riordina altrimenti la nuova colonna...
                base.InsertItem(index, item);                             //                            ...non sarebbe più l'ultima e quindi il datagrid andrebbe in edit su un oggetto già esistente ovviamente sbagliando
                //OnListChanged(New ListChangedEventArgs(ListChangedType.ItemAdded, index))
            }
            else
            {
                Items.Add(item); //A differenza di "base.InsertItem(index, item)" Non scatena l'aggiornamento dei Listener che fanno il binding sulla lista, mi serve aggiugere l'elemento, ordinare e poi segnalare ai listener
                Ordina();
            }

            AfterInsertItem?.Invoke(this, args);                                                                //?.Invoke invice della parentesi tonda diretta poichè se nessuno ha sottoscritto l'evento non va in eccezione

            PropertyChangedEventHandler PropChangedOggT = new PropertyChangedEventHandler(CambioProprietaOggT); //Se il valore di una delle proprietà dei vari oggetti contenuti nella lista cambia, allora intercetto il cambiamento...

            typeof(T).GetEvent("PropertyChanged").AddEventHandler(item, PropChangedOggT);                       //...e verifico se la prop. concorre all'ordinamento degli items
        }
示例#2
0
        protected override void InsertItem(Int32 index, T item)
        {
            BindListEventArgs args = new BindListEventArgs(index, item);

            BeforeInsertItem?.Invoke(this, args); //?.Invoke invice della parentesi tonda diretta poichè se nessuno ha sottoscritto l'evento non va in eccezione
            if (args.interrompiOperazione == true)
            {
                return;
            }

            base.InsertItem(index, item);

            AfterInsertItem?.Invoke(this, args); //?.Invoke invice della parentesi tonda diretta poichè se nessuno ha sottoscritto l'evento non va in eccezione
            ItemNumberChanged?.Invoke(this, args);

            var PropertyChangedEH = new PropertyChangedEventHandler(CambioPropOggT);        //Se il valore di una delle proprietà dei vari oggetti contenuti nella lista cambia, allora intercetto il cambiamento...

            typeof(T).GetEvent("PropertyChanged").AddEventHandler(item, PropertyChangedEH); //...e richiamo il metodo CambioPropOggT che a sua volta scatena l'evento CambioProprietàOggT
        }