2017-12-03 9 views
0

Gridviewから削除しようとしています。Observable CollectionからGeneric LIstへの無効なキャストを処理する方法

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

this.gridView.ItemsSourceList<Query>です。あなたはそれをそうでないものに投げかけようとしています。シンプルな解決策:実際のところにキャストする。

((List<Query>)this.gridView.ItemsSource).Remove(item); 

itemsToRemoveはあなたが誰にそれを観察する機会を与えていないので、仕方によって、のObservableCollectionである必要はありません。害はありませんが、代わりにList<Query>として作成したかもしれません。

+0

それをしました。私はリストが必要でした。 –

+1

トップノッチ。問題が解決した場合は、「受け入れる」チェックマークをクリックしてください –

0

アイテムをitemsToRemoveに追加していますが、ItemsSourceコレクションから削除する必要があります。これは明らかにList<Query>です。

これは動作するはずです:アイテムが追加または削除されたときList<T>が何らかの通知を上げていないので、あなたは再割り当てItemsSource財産になります

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; 
} 

注意を。

関連する問題