none
OnPropertyChanged RRS feed

  • Domanda

  • ciao ragazzi

    come sempre quando ho qualche piccolo problema mi rivolgo a voi.

    nella collezione ObservableCollection SchedaProduzione ho altre due collezione "figlie", DistintaBaseDto e DistinctEssenzeDto

    (tutte e due figlie di SchedaProduzione)

    in distinctEssenzeDto ho la proprietà EssenzaA e la proprieta TotaleMqA, cui valori li vado ad estrapolare da DistintaBaseDto proprietà MetriQuadri. 

    Il mio problema è che quando vado a cambiare valore in Quantita, Larghezza o Lunghezza da DistintaBaseDto, non riesco a far fare la notifica a TotaleMqA .

    La notifica nella proprietà Quantità di DistintaBaseDto  la faccio in questo modo 

                        OnPropertyChanged(subDettaglio.distinctEssenze, "TotaleMqA");

    la variabile subDettaglio.distinctEssenze la da null, non capisco perchè!

    eppure quando inizializzo le classi assegno i valori a queste variabili !!

    qualcuno potrebbe darmi qualche suggerimento ?

    grazie


    fabio miceli

    giovedì 23 febbraio 2012 09:03

Risposte

Tutte le risposte

  • Quando assegni i valori a queste variabili, controlli che tali valori non siano null?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 09:36
    Moderatore
  • ciao Marco,

    (sopra ho sbagliato a scrivere il nome della classe, non e SchedaProduzione  ma SubDettaglioDto)

    non sono null perchè se provo a cambiare struttura, e le proprietà EssenzaA e TotaleMqA  le metto in SubDettaglioDto la notifica funziona.

    ma così non posso fare perchè EssenzaA non è una, ma è una lista.


    fabio miceli

    giovedì 23 febbraio 2012 09:50
  • Ti chiedevo di verificare se, nel momento in cui assegni il valore a distinctEssenze, il valore che gli attribuisci è diverso da null.

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Contrassegnato come risposta Fabio Miceli giovedì 23 febbraio 2012 12:54
    giovedì 23 febbraio 2012 09:55
    Moderatore
  • credo di si, perchè quando inizializzo la lista DistinctEssenzeDto, la inserisco in SubDettaglioDto

                                    var distinctA = (from c in newSubDettaglioDto.distintaBase
                                                     group c by c.essenzeA.Essenza into es
                                                     select es).ToList();
                                    distinctA.ForEach(dd =>
                                    {
                                        Dto.DistinctEssenzeDto newDistinct = new Dto.DistinctEssenzeDto();
                                        newDistinct.EssenzaA = dd.Key;
                                        newDistinct.subDettaglio = newSubDettaglioDto;
                                        newSubDettaglioDto.distinctEssenze.Add(newDistinct);


                                    });


    fabio miceli

    giovedì 23 febbraio 2012 10:24
  • e i valori non sono null

    fabio miceli

    giovedì 23 febbraio 2012 10:30
  • Aspetta, ma distinctEssenze è una lista, non un oggetto "singolo": ovvero, essa non dispone di una proprietà TotaleMqA, ma sono gli elementi al suo interno che la contengono. Non puoi quindi fare una notifica in questo modo.

    La proprietà TotaleMqA dovrebbe quindi essere nella classe che contiene distinctEssenze: al suo interno, andrai a calcolare il valore di TotaleMqA usando tutti gli elementi che hai in distinctEssenze.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 10:34
    Moderatore
  • scusa, ma t intendi in questo modo ?

            [DataMember]
            public Nullable<decimal> TotaleMqA
            {
                get 
                {
                    decimal totMetri = 0;
                    totMetri += subDettaglio.distintaBase.Where(r => r.AA == true && r.essenzeA.Essenza == essenzaA).Sum(s => (s.MetriQuadri.GetValueOrDefault() * 2));
                    totMetri += subDettaglio.distintaBase.Where(r => r.AB == true && r.essenzeA.Essenza == essenzaA).Sum(s => s.MetriQuadri.GetValueOrDefault());
                    return totMetri;
                }
            }


    fabio miceli

    giovedì 23 febbraio 2012 10:40
  • Intendo che la proprietà TotaleMqA deve essere definita in subDettaglio, ovvero la classe che contiene distictEssenze, e quindi la notifica di tale proprietà va fatta su subDettaglio invece che su subDettaglio.distinctEssenze.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 10:48
    Moderatore
  • scusami, ma se ogni TotaleMqA ha il totale di ogni EssenzaA, se io la definisco in SubDettaglio, come farà a darmi la lista dei totali di EssenzaA ?


    fabio miceli

    giovedì 23 febbraio 2012 10:59
  • TotaleMqA  è una proprietà di DistinctEssenzeDto

    fabio miceli

    giovedì 23 febbraio 2012 11:04
  • DistintaBaseDto contiene una lista di Essenze diverse, in DistinctEssenzeDto  devo raggruppare le esenze ed ottenere il totale metri quadri

    fabio miceli

    giovedì 23 febbraio 2012 11:06
  • Vediamo di fare un po' di chiarezza, cerco di spiegarmi meglio. Tu hai questa notifica:

    OnPropertyChanged(subDettaglio.distinctEssenze, "TotaleMqA");
    

    Mi mostri la dichiarazione della proprietà distinctEssenze?

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 11:16
    Moderatore
  • lo scenario funziona, ma non riesco a fare la notifica !!


    fabio miceli

    giovedì 23 febbraio 2012 11:17
  • lo scenario funziona, ma non riesco a fare la notifica !!


    fabio miceli

    giovedì 23 febbraio 2012 11:17
  • questa è la dichiarazione della proprietà distinctEssenze, fatta in SubDettaglioDto

            [DataMember]
            public ObservableCollection<DistinctEssenzeDto> distinctEssenze { get; set; }


    fabio miceli

    giovedì 23 febbraio 2012 11:19
  • quella notifica la faccio da DistinteBasiDto dalla proprietà Quantita

    fabio miceli

    giovedì 23 febbraio 2012 11:20
  • OK, quindi, come ti dicevo prima, non puoi fare la notifica di una proprietà su un oggetto che non contiene tale proprietà.

    Con questa istruzione:

    OnPropertyChanged(subDettaglio.distinctEssenze, "TotaleMqA");

    Tu stai dicendo che vuoi notificare il cambiamento della proprietà TotaleMqA definita sull'oggetto distinctEssenze, ma distinctEssenze, essendo ti tipo ObservableCollection, non contiene questa proprietà. Sono gli oggetti al suo interno, di tipo DistinctEssenzeDto, che hanno la proprietà TotaleMqA.

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 11:24
    Moderatore
  • ok adesso ho capito !!!

    se io su ogni riga di distintaBase della collezione di subDettaglio.selectedItem, assegno la relativa riga di distinctEssenza, che contiene EssenzaA(Distinct) e TotaleMqA, e dopo faccio la notifica in questo modo...

                                    var t = newSubDettaglioDto.distintaBase.ToList();
                                    var distinctA = (from c in newSubDettaglioDto.distintaBase
                                                     group c by c.essenzeA.Essenza into es
                                                     select es).ToList();
                                    distinctA.ForEach(dd =>
                                    {
                                        Dto.DistinctEssenzeDto newDistinct = new Dto.DistinctEssenzeDto();
                                        newDistinct.EssenzaA = dd.Key;
                                        newDistinct.subDettaglio = newSubDettaglioDto;
                                        newSubDettaglioDto.distinctEssenze.Add(newDistinct);


                                        t.ForEach(o =>
                                            {
                                                if (o.EssenzaA == newDistinct.EssenzaA)
                                                {
                                                    o.distinctEssenze = newDistinct;
                                                };
                                            });


                                    });

    e poi da DistintaBaseDto faccio la notifica

    OnPropertyChanged(distinctEssenze, "TotaleMqA");

    pensi che potrebbe funzionare ?


    fabio miceli

    giovedì 23 febbraio 2012 11:42
  • dichiarando distinctEssenze da DistinteBaseDto in questo modo:

            public DistinctEssenzeDto distinctEssenze { get; set; }


    fabio miceli

    giovedì 23 febbraio 2012 11:49
  • qualcosa si muove !!!!!!

    devo verificare se effetivamente il calcolo lo fa giusto !!!!


    fabio miceli

    giovedì 23 febbraio 2012 11:55
  • Sì, l'approccio mi sembra corretto, fammi sapere se ottieni il risultato voluto!

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 12:00
    Moderatore
  • ok.....funziona !!!! sono veramente contento !!!


    fabio miceli

    giovedì 23 febbraio 2012 12:04
  • ti chiedo un' ultima cosa.....vorrei solo sapere se è una cosa fattibile:

    se io in una riga della distinta cambio essenza, con una uguale già nella lista, ce possibilità di far fare la notifica per il totale ?


    fabio miceli

    giovedì 23 febbraio 2012 12:08
  • In generale ti direi di sì, ma per essere più preciso dovrei sapere cosa intendi con "cambiare essenza in una distinta".


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 12:15
    Moderatore
  • intendo cambiare valore alla proprietà EssenzaA, ad esempio invece che Acero, Frassino

    fabio miceli


    giovedì 23 febbraio 2012 12:17
  • Allora non ci sono problemi nel fare la notifica, basta procedere nel solito modo: quando cambi il tipo di essenza, fai la OnPropertyChanged per la proprietà che contiene il totale.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 12:22
    Moderatore
  • non cambia....forse perchè effetivamente la proprietà MetriQuafri non cambia, per cui si dovrebbe rigenerare il ciclo Distinct ?!?!

    fabio miceli

    giovedì 23 febbraio 2012 12:38
  • Non conosco i dettagli del tuo sistema, quindi non so dirti se il motivo è questo, ma "a naso" farei un tentativo come hai detto :-)


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Contrassegnato come risposta Fabio Miceli giovedì 23 febbraio 2012 12:52
    giovedì 23 febbraio 2012 12:42
    Moderatore
  • ok....vedrò di capirci !

    grazie per i tuoi consigli

    a risentirci

    ciao


    fabio miceli

    giovedì 23 febbraio 2012 12:52
  • Non c'è di che.

    A presto.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    giovedì 23 febbraio 2012 12:58
    Moderatore