错误:System.NullReferenceException:未将对象引用设置为对象的实例

时间:2013-12-15 00:44:39

标签: c# mvvm windows-phone

使用Windows-phone应用程序C#:

添加我的信息时出现此错误“System.NullReferenceException:对象引用未设置为对象的实例。”tại“ Data.Add(newInfo) “我使用MVVM模式。

MainViewModel.cs 中,我的添加功能

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

我的 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>

我的添加按钮:

 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!");

    }

在我的 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;
        }


    }

1 个答案:

答案 0 :(得分:1)

您没有使用MainViewModel关键字

来实例化new
 private static MainViewModel mainviewmodel;
        public static MainViewModel MainViewModel
        {
            get
            {
          mainviewmodel = new  MainViewModel();
                return    mainviewmodel;
            }
        }

<强>更新

这一行应该是这样的

private ObservableCollection<Member> _data = new ObservableCollection<Member>();