使用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;
}
}
答案 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>();