从ListBox中删除时出现NullReferenceException

时间:2013-11-01 19:12:45

标签: c# wpf mvvm listbox nullreferenceexception

在我的程序中,我有一个ListBox,用户填充了项目。拥有ListBox的UserControl是用MVVM样式编写的。

在数据模型中,ListBox具有SelectedCommand属性,可更改模型中的某些值(反过来更改视图)。我还有一个“删除”按钮,用于删除此选定项目。

在删除SelectedCommand时,我收到NullReferenceException,我猜这是由于我的SelectedCommand属性是如何写的。我确定问题以及如何解决这个问题对你们来说很明显,但对我来说并非如此。

来自数据模型

SelectedCommand属性:

public MyCommandDefinition SelectedCommand
{
    get { return _selectedCommand; }
    set
    {
        _selectedCommand = value;
        NotifyPropertyChange(() => SelectedCommand);

        if (SelectedCommand.DisplayName == _setOutput) //**NullReferenceException on this line!
        {
            //Commands to change values in model
        }

        if(...) { ... } 
    }
}

异常框显示“对象引用未设置为对象的实例”。我认为问题是SelectedCommand从列表中删除后会变为null。如果我正在进行依赖于所选内容的数据操作,我该如何解决这个问题呢?

谢谢。

3 个答案:

答案 0 :(得分:1)

您的valuenull。你需要以某种方式考虑这种情况。这是一个解决方案:

public MyCommandDefinition SelectedCommand
{
    get { return _selectedCommand; }
    set
    {
        _selectedCommand = value;
        NotifyPropertyChange(() => SelectedCommand);

        if (SelectedCommand != null && SelectedCommand.DisplayName == _setOutput) 
        {
            //Commands to change values in model
        }

        if(...) { ... } 
    }
}

答案 1 :(得分:0)

我有类似的问题并找到了解决方法,这是因为我们无法删除ItemCheck事件中的当前项目:

private void myList_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // This should work
    BeginInvoke((MethodInvoker)delegate()
    {
        myList.Items.Remove(myItem);
    });
}

答案 2 :(得分:-1)

public MyCommandDefinition SelectedCommand
{
    get { return _selectedCommand; }
    set
    {

        if (value!=null)
         {

        _selectedCommand = value;
        NotifyPropertyChange(() => SelectedCommand);

        if (SelectedCommand.DisplayName == _setOutput) //**NullReferenceException on this line!
        {
            //Commands to change values in model
        }

            if(...) { ... } 
         }
        }
    }