2017-12-03 23 views
0

Gridview에서 삭제하려고합니다. GRIDVIEWObservable 컬렉션에서 일반 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; 
} 

제거 '1[Inventory.Query]' to type 'System.Collections.ObjectModel.ObservableCollection 1 Inventory.Query] System.Collections.Generic.List'.

답변

2

this.gridView.ItemsSourceList<Query>입니다. 당신은 그것을 무언가에 던지려고합니다. 간단한 해결책 : 실제로 무엇으로 던지십시오. 당신이 누군가에게 그것을 관찰 할 수있는 기회를 제공하지 않기 때문에

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

itemsToRemove는 방법함으로써, ObservableCollection에 할 필요는 없습니다. 아무런 해를 끼치 지 않았지만, 대신 List<Query>으로 생성했을 수도 있습니다.

+0

그랬습니다. 나는 목록이 필요했다. –

+1

최고 노치. 문제가 해결되면 "수락"체크 표시를 클릭하십시오. –

0

당신은 itemsToRemoveQuery 항목을 추가하지만 분명히 List<Query>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; 
} 

참고 모든 알림을 제기하지 않는 List<T> 이후 ItemsSource 속성을 재 할당합니다.