2011-05-12 4 views
0

가상 모드에서 ListView를 열거하는 방법은 무엇입니까?가상 모드에서 ListView를 열거하는 방법은 무엇입니까?

나는 목록보기 항목을 열거하기 위해 OfType<>() 메서드를 사용하고 있습니다. 그러나 그것의 예외를 던지는 것과 같이, 목록보기는 그것이 가상 모드에있을 때 열거 될 수 없다. 여기

는 가상 모드에있을 때 내가있는 ListView에서 항목을 얻는 방법

List<String> lst= myListView.Items.OfType<ListViewItem>().Select(X=>X.Text).ToList(); 

그래서 내 코드?

나에게 그것이 가상 모드의 경우 항목에없는 때문에

답변

2

당신이 목록보기에서 항목을 얻을 수 <>

감사합니다 사전에 .OfType을 사용하는 방법을 게시하시기 바랍니다 리스트 뷰. 그것이 가상 모드의 핵심입니다.

대신 항목을 누르고 있으면 항목을 표시하는 데 필요한 정보가 목록보기에 표시됩니다. 가상 모드에서 목록보기를 성공적으로 실행하는 경우 거의 모든 항목이 이미 목록에 있습니다.

documentation에서 인용 :

을 true로 VirtualMode 속성을 설정 가상 모드로 ListView에 넣습니다. 가상 모드에서 정상적인 항목 수집은 사용되지 않습니다. 대신 ListViewItem 개체는 ListView에 이 필요하므로 동적으로 으로 생성됩니다.

가상 모드는 많은 상황에서 유용 할 수 있습니다. ListView 개체 이 이미 메모리에있는 매우 큰 컬렉션에서 채워 져야하는 경우 각 항목 에 대해 ListViewItem 개체를 만들면 낭비가 될 수 있습니다. 가상 모드에서 필요한 항목은 만 작성됩니다. 이 아닌 경우 ListViewItem 개체의 값을 으로 자주 다시 계산해야하며 전체 컬렉션에 대해 을 수행하면 은 허용 할 수없는 성능을 보입니다. 가상 모드에서는 필수 항목 인 만 계산됩니다.

0

ListViewItemCollection.GetEnumerator() 메서드는 목록이 가상 모드에있을 때 호출되면 예외를 throw합니다. 즉, OfType()을 비롯한 모든 LINQ 메서드를 통해 액세스 할 수 없습니다.

그러나, 당신은 단지리스트의 단순 반복 수행 할 수 있습니다 그러나 (다시)

List<string> lst = new List<string>(); 
for (int i = 0; i < listView1.VirtualListSize; i++) { 
    lst.Add(listView1.Items[i].Text); 

목록이 가상 경우, 그것은 아마도 많은 수의 항목이있다 그렇게 시간이 좀 걸릴 수 있습니다 :)

관련 문제