none
MVVM Light Errore Fantoccio RRS feed

  • Domanda

  • Ciao a tutti sto studiando questo framework  e per prova volevo caricare dei dati fantoccio nella view dal viewModel ma mi da questo errore,

    Eccezione non gestita di tipo 'System.StackOverflowException' in GalaSoft.MvvmLight.WPF45.dll
    

    questo è il viewmodel:

    using GalaSoft.MvvmLight;
    namespace MVVMProva1.ViewModel
    {
        public class ViewProva : ViewModelBase
        {
    
            
            public ViewProva()
            {
              ViewProva  _cli = new ViewProva()
                {
                    Codice = 123,
                    Descrizione = "Pincopallino",
                    Prezzo = 15
    
                };
    
    
            }
    
    
    
    
    
    
            private int codice;
    
            public int Codice
            {
                get
                {
                    return codice;
                }
                set
                {
                    value = codice;
                    RaisePropertyChanged(() => Codice);
                }
    
            }
    
            private string descrizione;
    
            public string Descrizione
            {
                get
                {
                    return descrizione;
                }
                set
                {
                    value = descrizione;
                    RaisePropertyChanged(() => Descrizione);
                }
    
            }
    
            private int prezzo;
    
            public int Prezzo
            {
                get
                {
                    return prezzo;
                }
                set
                {
                    value = prezzo;
                    RaisePropertyChanged(() => Prezzo);
                }
    
            }
    
    
           
        }
    }
    


    Paolo

    domenica 16 febbraio 2014 20:59

Risposte

  • Ciao a tutti sto studiando questo framework  e per prova volevo caricare dei dati fantoccio nella view dal viewModel ma mi da questo errore,

    Eccezione non gestita di tipo 'System.StackOverflowException' in GalaSoft.MvvmLight.WPF45.dll

    questo è il viewmodel:

    using GalaSoft.MvvmLight;
    namespace MVVMProva1.ViewModel
    {
        public class ViewProva : ViewModelBase
        {
    
            
            public ViewProva()
            {
              ViewProva  _cli = new ViewProva()
                {
                    Codice = 123,
                    Descrizione = "Pincopallino",
                    Prezzo = 15
    
                };
    
    
            }
    
    
    
    
    
    
            private int codice;
    
            public int Codice
            {
                get
                {
                    return codice;
                }
                set
                {
                    value = codice;
                    RaisePropertyChanged(() => Codice);
                }
    
            }
    
            private string descrizione;
    
            public string Descrizione
            {
                get
                {
                    return descrizione;
                }
                set
                {
                    value = descrizione;
                    RaisePropertyChanged(() => Descrizione);
                }
    
            }
    
            private int prezzo;
    
            public int Prezzo
            {
                get
                {
                    return prezzo;
                }
                set
                {
                    value = prezzo;
                    RaisePropertyChanged(() => Prezzo);
                }
    
            }
    
    
           
        }
    }


    Paolo

    Nel costruttore di ViewProva, stai creando un oggetto ViewProva (new), ma creare un oggetto significa chiamare il suo costruttore. Così la cosa si ripeterebbe all'infinito, fino al punto in cui lo spazio sullo stack si esaurisce:

    public ViewProva() // <---------------------- !!!!!!!!!!!!!!!
            {
              ViewProva  _cli = new ViewProva() // <----------- chiamata ricorsiva
                {
                    Codice = 123,
                    Descrizione = "Pincopallino",
                    Prezzo = 15
    
                };
    
    
            }
    
    
    Non so cosa avevi in mente di fare, ma se vuoi inizializzare le tre proprietà nel costruttore puoi fare così:

            public ViewProva()
            {
                    Codice = 123;
                    Descrizione = "Pincopallino";
                    Prezzo = 15;
            }


    • Modificato BlueLed domenica 16 febbraio 2014 21:52
    • Proposto come risposta Gianluca Carucci lunedì 17 febbraio 2014 07:21
    • Contrassegnato come risposta Nio74 lunedì 17 febbraio 2014 10:07
    domenica 16 febbraio 2014 21:51

Tutte le risposte

  • Ciao a tutti sto studiando questo framework  e per prova volevo caricare dei dati fantoccio nella view dal viewModel ma mi da questo errore,

    Eccezione non gestita di tipo 'System.StackOverflowException' in GalaSoft.MvvmLight.WPF45.dll

    questo è il viewmodel:

    using GalaSoft.MvvmLight;
    namespace MVVMProva1.ViewModel
    {
        public class ViewProva : ViewModelBase
        {
    
            
            public ViewProva()
            {
              ViewProva  _cli = new ViewProva()
                {
                    Codice = 123,
                    Descrizione = "Pincopallino",
                    Prezzo = 15
    
                };
    
    
            }
    
    
    
    
    
    
            private int codice;
    
            public int Codice
            {
                get
                {
                    return codice;
                }
                set
                {
                    value = codice;
                    RaisePropertyChanged(() => Codice);
                }
    
            }
    
            private string descrizione;
    
            public string Descrizione
            {
                get
                {
                    return descrizione;
                }
                set
                {
                    value = descrizione;
                    RaisePropertyChanged(() => Descrizione);
                }
    
            }
    
            private int prezzo;
    
            public int Prezzo
            {
                get
                {
                    return prezzo;
                }
                set
                {
                    value = prezzo;
                    RaisePropertyChanged(() => Prezzo);
                }
    
            }
    
    
           
        }
    }


    Paolo

    Nel costruttore di ViewProva, stai creando un oggetto ViewProva (new), ma creare un oggetto significa chiamare il suo costruttore. Così la cosa si ripeterebbe all'infinito, fino al punto in cui lo spazio sullo stack si esaurisce:

    public ViewProva() // <---------------------- !!!!!!!!!!!!!!!
            {
              ViewProva  _cli = new ViewProva() // <----------- chiamata ricorsiva
                {
                    Codice = 123,
                    Descrizione = "Pincopallino",
                    Prezzo = 15
    
                };
    
    
            }
    
    
    Non so cosa avevi in mente di fare, ma se vuoi inizializzare le tre proprietà nel costruttore puoi fare così:

            public ViewProva()
            {
                    Codice = 123;
                    Descrizione = "Pincopallino";
                    Prezzo = 15;
            }


    • Modificato BlueLed domenica 16 febbraio 2014 21:52
    • Proposto come risposta Gianluca Carucci lunedì 17 febbraio 2014 07:21
    • Contrassegnato come risposta Nio74 lunedì 17 febbraio 2014 10:07
    domenica 16 febbraio 2014 21:51
  • Grazie mi sa che dormivo.

    Paolo

    lunedì 17 febbraio 2014 10:07