DataGrid.Refresh 在 c# WPF 中生成“对象引用未设置为对象的实例”消息

DataGrid.Refresh generates "Object reference not set to an instance of an object" message in c# WPF

提问人:Sander Buruma 提问时间:5/19/2019 更新时间:5/19/2019 访问量:181

问:

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

我需要找到更广泛的错误消息或停止此消息的方法。

C# WPF DataGrid NullReferenceException

评论

0赞 Crowcoder 5/19/2019
你是说 ?检查是否为 null,如果是,请不要这样做。DataGridXML.Items.Refresh();Items
0赞 Sander Buruma 5/19/2019
我已经在调试器中检查了这一点,它仍然在DataGridXML.Items下显示集合及其其余元素

答: 暂无答案