C# Listview删除项索引源正在使用wpf
我想从我的C# Listview删除项索引源正在使用wpf,c#,wpf,listview,items,C#,Wpf,Listview,Items,我想从我的observedcollection ObservableCollection<GetterSetter> _getterSetter = new ObservableCollection<GetterSetter>(); public ObservableCollection<GetterSetter> showList { get { return this._getterSetter; } } 我想像这样删除
observedcollection
ObservableCollection<GetterSetter> _getterSetter = new ObservableCollection<GetterSetter>();
public ObservableCollection<GetterSetter> showList
{
get { return this._getterSetter; }
}
我想像这样删除选中的项目,它会给我一个错误
listView.Items.Remove(listView.SelectedItems[0]);
showList.RemoveAt(listView.Items.IndexOf(listView.SelectedItems[0]));
我也试过这个
var delete = SelectedListViewItem;
listView.Items.Remove(delete);
两个人都给了我这个错误
PresentationFramework.dll中发生类型为“System.InvalidOperationException”的未处理异常
其他信息:ItemsSource正在使用时,操作无效。改为使用ItemsControl.ItemsSource访问和修改元素
顺便说一下,GetterSetter
是我的cs文件,我的第三个代码段在哪里
public GetterSetter SelectedListViewItem
{
get { return _selectedListViewItem; }
set
{
if (Equals(value, _selectedListViewItem)) return;
_selectedListViewItem = value;
OnPropertyChanged();
}
}
正如错误所说,直接从ItemsSource执行此操作。要做到这一点,您需要将ItemsSource设置为其类型的大小写,然后执行删除操作
if(SelectedListViewItem != null)
{
// EDIT: Typo in the lambda for FirstOrDefault
var delete = showList.FirstOrDefault(x => SelectedListViewItem.ShowName == x.ShowName);
if(delete != null)
{
((ObservableCollection<GetterSetter>)listView.ItemsSource).Remove(delete);
}
}
if(SelectedListViewItem!=null)
{
//编辑:在FirstOrDefault的lambda中键入
var delete=showList.FirstOrDefault(x=>SelectedListViewItem.ShowName==x.ShowName);
如果(删除!=null)
{
((ObservableCollection)listView.ItemsSource).删除(delete);
}
}
编辑:空怪物正在攻击你。现在它给我“mscorlib.dll中发生了“System.ArgumentOutOfRangeException”类型的未处理异常。其他信息:索引超出范围。必须为非负且小于集合的大小。”在这行代码中,
showNameBox.Text=showList[listView.Items.IndexOf(listView.SelectedItems[0])].ShowName;
SelectedListViewItem到底是什么?它是在哪里定义的?它是在xaml代码中定义的。您可以在第二个代码段中看到它绑定到属性,但我需要知道该属性是什么类型。好的,我看到我编辑了我的问题,您可以在最后一个代码段中看到它
public GetterSetter SelectedListViewItem
{
get { return _selectedListViewItem; }
set
{
if (Equals(value, _selectedListViewItem)) return;
_selectedListViewItem = value;
OnPropertyChanged();
}
}
if(SelectedListViewItem != null)
{
// EDIT: Typo in the lambda for FirstOrDefault
var delete = showList.FirstOrDefault(x => SelectedListViewItem.ShowName == x.ShowName);
if(delete != null)
{
((ObservableCollection<GetterSetter>)listView.ItemsSource).Remove(delete);
}
}