我正在尝试从Gridview中删除。
if (this.gridView.SelectedItems.Count == 0)
{
return;
}
ObservableCollection<Query> itemsToRemove = new ObservableCollection<Query>();
foreach (Query item in this.gridView.SelectedItems)
{
itemsToRemove.Add(item);
}
foreach (Query item in itemsToRemove)
{
//this line causes the invalid cast
((ObservableCollection<Query>)this.gridView.ItemsSource).Remove(item as Query);
Code = item.CODE;
}
从Gridview中删除项目
无效的投射例外
无法转换类型的对象
'System.Collections.Generic.List 1[Inventory.Query]' to type 'System.Collections.ObjectModel.ObservableCollection
1 [Inventory.Query]'。
答案 0 :(得分:2)
它告诉您this.gridView.ItemsSource
是List<Query>
。你试图把它投射到它不是的东西上。简单的解决方案:将其投射到它的真实状态。
((List<Query>)this.gridView.ItemsSource).Remove(item);
顺便说一下, itemsToRemove
不需要是ObservableCollection,因为你没有给任何人一个观察它的机会。没有造成任何伤害,但您也可以将其创建为List<Query>
。
答案 1 :(得分:0)
您要将Query
项添加到itemsToRemove
,但是您应该从ItemsSource
集合中删除它们,这些集合显然是List<Query>
。
这应该有效:
var items = this.gridView.ItemsSource as List<Query>;
foreach (Query item in itemsToRemove)
{
if(items.Contains(item))
items.Remove(item);
Code = item.CODE;
this.gridView.ItemsSource = items;
}
请注意,您必须重新分配ItemsSource
属性,因为List<T>
在添加或删除项目时不会发出任何通知。