如果先前选择了其中一条记录,则 ListView 重新加载错误

ListView reloading error if one of the records is selected priorly

我有一个 ListView,它通过 class 从数据库中提取数据。

我还使用 listView_SelectionChanged 来跟踪所选产品的名称。

 public void listView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        var selected = LstView.SelectedItem as Product;

            string prodName = selected.ProductId.ToString();
            SelectedProductName.Text = prodName;



    }

A​​s you can see, when row of the ListView is selected, I pull the ProductId, store it in string prodName and then assign it to TextBlock SelectedProductName. 在这一点上,当我点击 Go!按钮重新加载相同的列表,我在线上收到错误:

 string prodName = selected.ProductId.ToString();

也就是说: System.NullReferenceException: 'Object reference not set to an instance of an object.'

答案在评论中,这是为偶然发现此问题的未来开发人员发布的。

问题: 当您重新加载列表时,所选项目变为空,因为不再选择任何内容。这导致您的变量 'selected' 为 null,并且您无法访问 null 类 的 properties/methods。这样想。你买了一辆汽车(你的清单),你安装了一个新的触摸屏收音机(你选择了一个项目),你卖掉了这辆车并买了一辆新的(你点击了重新加载清单的按钮),然后你试图改变你旧车收音机里的电台

解决方案:

public void listView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var selected = LstView.SelectedItem as Product;

    if (selected != null)
    {
        SelectedProductName.Text = selected.ProductId.ToString();
    }
    else
    {
        SelectedProductName.Text = "Default Product Name";
    }
}