如果先前选择了其中一条记录,则 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;
}
As 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";
}
}
我有一个 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;
}
As 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";
}
}