Error: System.NullReferenceException: Object reference not set to an instance of an object

18,625

you are not instantiating your MainViewModel with the new keyword

 private static MainViewModel mainviewmodel;
        public static MainViewModel MainViewModel
        {
            get
            {
          mainviewmodel = new  MainViewModel();
                return    mainviewmodel;
            }
        }

Update

this line should be like this

private ObservableCollection<Member> _data = new ObservableCollection<Member>(); 
Share:
18,625
Admin
Author by

Admin

Updated on June 13, 2022

Comments

  • Admin
    Admin almost 2 years

    Work with Windows-phone app C#:

    I get this error when add my info "System.NullReferenceException: Object reference not set to an instance of an object." tại "Data.Add(newInfo)" I use MVVM pattern.

    In MainViewModel.cs, my Add Function is

    public class MainViewModel : INotifyPropertyChanged
    {
        private MemberDataContext MemberDB;
    
        public MainViewModel(string MemberDBConnectionString)
        {
            MemberDB = new MemberDataContext(MemberDBConnectionString);
        }
    
    
        private ObservableCollection<Member> _data;
        public ObservableCollection<Member> Data
        {
            get { return _data; }
            set
            {
                _data = value;
                NotifyPropertyChanged("Data");
            }
        }
    
        public void LoadCollectionsFromDatabase()
        {
            var infoInDB = from Member ss in MemberDB.Members
                           select ss;
            Data = new ObservableCollection<Member>(infoInDB);
        }
    
    
        public void Addinfo(Member newInfo)
        {
            MemberDB.Members.InsertOnSubmit(newInfo);
    
            MemberDB.SubmitChanges();
            Data.Add(newInfo); **<~~~~~~~ Error in this line**
    
        }
    
        public void Update(Member currentmember, string fullname, string address)
        {
            currentmember.Address = address;
            currentmember.FullName = fullname;
        }
    
        public void Delete(Member currentmember)
        {
            MemberDB.Members.DeleteOnSubmit(currentmember);
            Data.Remove(currentmember);
        }
    
        public void SaveData()
        {
            MemberDB.SubmitChanges();
        }
    
        public void LoadData()
        {
            if (Data == null)
            {
                Data = new ObservableCollection<Member>(MemberDB.Members);
                var oderedFullName = from Member b in MemberDB.Members
                                     orderby b.FullName
                                     select b;
            }
        }
    
        public MainViewModel()
        {
            MemberDB = new MemberDataContext("Data source=isostore:/Member.sdf");
            if (!MemberDB.DatabaseExists())
            {
                MemberDB.CreateDatabase();
            }
        }
    
    
    
        #region INotifyPropertyChanged Members
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        // Used to notify the app that a property has changed.
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
    
    }
    public class ViewDetails : INotifyPropertyChanged
    {
        private string _fullname;
    
        public string FullName
        {
            get
            {
                return _fullname;
            }
            set
            {
                _fullname = value;
    
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Fullname"));
                }
            }
        }
    
        private string _address;
    
        public string Address
        {
            get
            {
                return _address;
            }
            set
            {
                _address = value;
    
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("Address"));
                }
            }
        }
        public void LoadDetails(Member abc)
        {
            FullName = abc.FullName;
            Address = abc.Address;
        }
        public void UpdateDetails(Member abc)
        {
            abc.FullName = FullName;
            abc.Address = Address;
        }
         #region INotifyPropertyChanged Members
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        // Used to notify the app that a property has changed.
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
    

    My Add.xaml:

    <StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    
            <TextBlock Text="FullName"/>
            <TextBox x:Name="addfullname"/>
            <TextBlock Text="Address"/>
            <TextBox x:Name="addaddress" />
    
    
        </StackPanel>
    

    My Add Button:

     private void Add_Click(object sender, EventArgs e)
        {
            if ((addaddress.Text.Length > 0) && (addfullname.Text.Length > 0))
            {
                Member newInfo = new Member
                {
                    FullName = addfullname.Text,
                    Address = addaddress.Text
                };
                App.MainViewModel.Add(newInfo);
    
                if (NavigationService.CanGoBack)
                {
                    NavigationService.GoBack();
                }
            }
            //else MessageBox.Show("Data cannot be null!");
    
        }
    

    In my App.xaml

      public partial class App : Application
    {
        private static object _lockObject = new object();
        private static MainViewModel mainviewmodel;
        public static MainViewModel MainViewModel
        {
            get
            {
    
    
                if (mainviewmodel == null)
                {
                  lock (_lockObject)
                  {
                      mainviewmodel = new MainViewModel();
                    }
                }
                return mainviewmodel;
            }
    
    
        }