我有鼠标双击列表视图我试图获取所选项目的名称和路径,我已编写以下代码但我收到“System.NullReferenceException”错误
public class Listview_data
{
public string name
{
get;
set;
}
public ImageSource Image
{
get;
set;
}
public string path
{
get;
set;
}
};
private void ListView_MouseDClick(object sender, MouseButtonEventArgs e)
{
Listview_data lvd = null;
lvd = DocsListView.SelectedItem as Listview_data;
MessageBox.Show(lvd.name);
}
我附上了调试截图
答案 0 :(得分:3)
根据屏幕截图DocsListView.SelectedItem
的类型为SimpleCube.Documents
所以在这行代码lvd
为空后
lvd = DocsListView.SelectedItem as Listview_data;
在访问NullReferenceException
lvd.name
MessageBox.Show(lvd.name)
首先修复你的绑定
答案 1 :(得分:1)
根据发布的调试图片,您的代码应该是
private void ListView_MouseDClick(object sender, MouseButtonEventArgs e)
{
SimpleCube.Documents lvd = null;
lvd = DocsListView.SelectedItem as SimpleCube.Documents;
if(lvd != null)
MessageBox.Show(lvd.Name);
}
或者,也许,ListView的数据源设置应该更改为Listview_Data对象列表。
答案 2 :(得分:0)
例如,您应该在使用之前检查SelectedItem是否为空;
private void ListView_MouseDClick(object sender, MouseButtonEventArgs e)
{
Listview_data lvd = null;
lvd = DocsListView.SelectedItem as Listview_data;
if (lvd == null)
{
MessageBox.Show("You should only double click on an item");
return;
}
MessageBox.Show(lvd.name);
}
如果没有选择任何项,则SelectedItem属性可能会返回null。同样通过使用'as'进行转换,如果对象不是正确的类型,您也可以稍后获得空引用异常,尽管在这种情况下可能不是这种情况。
John Skeet撰写了一篇很好的文章,关于使用'as'进行类型转换和检查null,绝对值得一读(Casting vs "as" - embracing exceptions)。