如何处理从Observable Collection到Generic LIst的无效转换

时间:2017-12-03 22:08:33

标签: c# wpf exception observablecollection

我正在尝试从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]'。

2 个答案:

答案 0 :(得分:2)

它告诉您this.gridView.ItemsSourceList<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>在添加或删除项目时不会发出任何通知。