0

在我的程序中,我有一个ListBox由用户填充的项目。拥有 的 UserControlListBox是用 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如果我正在根据所选内容进行数据操作,我该如何解决这个问题?

谢谢你。

4

3 回答 3

1

value的是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(...) { ... } 
    }
}
于 2013-11-01T19:17:30.743 回答
0

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

private void myList_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // This should work
    BeginInvoke((MethodInvoker)delegate()
    {
        myList.Items.Remove(myItem);
    });
}
于 2013-11-11T15:23:51.840 回答
-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(...) { ... } 
         }
        }
    }
于 2013-11-01T19:20:12.097 回答