C# 从列表框中删除时出现NullReferenceException

C# 从列表框中删除时出现NullReferenceException,c#,wpf,mvvm,listbox,nullreferenceexception,C#,Wpf,Mvvm,Listbox,Nullreferenceexception,在我的程序中,我有一个列表框,由用户填充项目。拥有ListBox的用户控件是用MVVM样式编写的 在数据模型内部,ListBox具有一个SelectedCommand属性,该属性更改模型中的某些值(进而更改视图)。我还有一个“删除”按钮,可以删除这个选中的项目 在删除SelectedCommand时,我收到一个NullReferenceException,我猜这是由于我的SelectedCommand属性是如何编写的。我相信问题以及如何解决对你们来说是显而易见的,但对我来说不是 Selected

在我的程序中,我有一个
列表框
,由用户填充项目。拥有
ListBox
的用户控件是用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
。如果我正在进行依赖于所选内容的数据操作,那么如何解决此问题


谢谢。

您的
null
。你需要以某种方式解释这种情况。这里有一个解决方案:

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

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

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

我遇到了类似的问题并找到了解决方法,这是由于无法在ItemCheck事件中删除当前项造成的:

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

如果值为null,则返回
似乎不是一个好主意。如果选择了命令,为什么不直接使用
null&&SelectedCommand.DisplayName==\u setOutput
…@geng:请立即检查。
private void myList_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // This should work
    BeginInvoke((MethodInvoker)delegate()
    {
        myList.Items.Remove(myItem);
    });
}