提问人:Sander Buruma 提问时间:5/19/2019 更新时间:5/19/2019 访问量:181
DataGrid.Refresh 在 c# WPF 中生成“对象引用未设置为对象的实例”消息
DataGrid.Refresh generates "Object reference not set to an instance of an object" message in c# WPF
问:
在我的 WPF 项目中,我显示 DataGrid 中类的 List 中的数据。每次该列表中的信息发生更改时,DataGrid 都会刷新。 当将新项目添加到列表中时,当项目发生更改时,甚至在删除项目时,这都可以正常工作。但是,当删除项时,它还会生成一条 MessageBox 类型消息,指出“对象引用未设置为对象的实例”。该功能似乎完全按预期工作,但我需要此弹出消息停止出现。
private void VerwijderGezinButton_Click(object sender, RoutedEventArgs e)
{
if (DataGridXML.SelectedIndex < 0)
return;
Gezin gezin = (Gezin)DataGridXML.SelectedItem;
Gezinnen.Remove(gezin);
DataGridPersonen.SelectedIndex = -1;
DataGridXML.Items.Refresh();
SaveToFile();
}
DataGridPersonen 是第二个 DataGrid,它在 gezinnen List 的各个项实例中显示另一个类的列表。
Gezinnen 在班级中是这样分配的
internal List<Gezin> Gezinnen { get; set; } = new List<Gezin> { };
Gezin 是这样定义的
[Serializable]
class Gezin
{
public string Naam { get; set; }
public string Prijs { get; set; }
public int Kinderen { get; set; }
public List<Volwassene> Volwassenen { get; set; }
public Gezin(string naam, int aantalKinderen)
{
Naam = naam;
Volwassenen = new List<Volwassene> { };
Prijs = "n/a";
Kinderen = aantalKinderen;
}
public void VoegVolwasseneToe(string naam, DateTime geboorteDatum)
{
Volwassenen.Add(new Volwassene(naam, geboorteDatum.ToShortDateString()));
}
public void VerwijderVolwassene(Volwassene persoon)
{
try
{
Volwassenen.Remove(persoon);
}
catch (Exception err)
{
MessageBox.Show("ERROR:\n\n" + err.Message);
}
}
}
和Volwassene
[Serializable]
class Volwassene
{
public string Voornaam { get; set; }
public string GeboorteDatum { get; set; }
public Volwassene(string voornaam, string geboorteDatum)
{
Voornaam = voornaam;
GeboorteDatum = geboorteDatum;
}
}
当我使用 Visual Studio 的调试模式并逐行运行代码时,此消息正好出现在 在调试模式下检查时,变量本身似乎会正确更改。DataGridXML.Refresh();
我需要找到更广泛的错误消息或停止此消息的方法。
答: 暂无答案
评论
DataGridXML.Items.Refresh();
Items