无法访问listview上的selecteditem字段

时间:2013-10-28 11:43:37

标签: c# wpf listview

我有鼠标双击列表视图我试图获取所选项目的名称和路径,我已编写以下代码但我收到“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);
}

我附上了调试截图 enter image description here

3 个答案:

答案 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)。