在我的程序中,我有一个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
。如果我正在进行依赖于所选内容的数据操作,我该如何解决这个问题呢?
谢谢。
答案 0 :(得分: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(...) { ... }
}
}
答案 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(...) { ... }
}
}
}