2013-09-03 2 views
1

데이터베이스의 내용을 멋지게 표시하는 Winforms의 가상 ListView가 있습니다. 항목은 데이터베이스에 비동기 적으로 추가되며 스크롤 막대를 아래로 당길 때 표시됩니다.프로그래밍 방식으로 가상 ListView의 아래쪽 행을 표시하는 방법

이제 비동기 스레드가 데이터베이스에 추가 될 때마다 ListView가 업데이트되어 맨 아래 행에 어떤 인덱스가 있어야 하는지를 알고 싶습니다. 내가 ListView에 객체를 추가하기 전에, 나는 ItemHeight를하고 목록 상자의 높이를 기반으로, 상단 인덱스해야하는 인덱스 세트리스트 박스로 그렇게 할 수 있습니다 :

int numItems = listBox1.ClientSize.Height/listBox1.ItemHeight; 
if (listBox1.TopIndex == listBox1.Items.Count - numItems - 1) 
    listBox1.TopIndex = listBox1.Items.Count - numItems + 1; 

불행하게도 둘 ItemHeight를도 TopIndex리스트 뷰에 존재하지 않습니다.

하지만 중요한 질문은 : 특정 인덱스 범위를 표시하거나 일부 인덱스가 표시되도록 가상 ListView에 지시하려면 어떻게해야합니까?

+0

이 왜 이벤트 CollectionChanged를 사용할 수 있습니까? 새 행을 표시하려면 listview에 데이터 소스 변경 사항을 알릴 필요가 있습니다. –

+0

@ Na Na : ObservableCollection 의 일부인 CollectionChanged를 사용하는 방법을 모릅니다. 예제를 보여줄 수 있습니까? – erict

답변

3

당신은 ListView (아무리 가상 모드에서의 여부)에 상단 표시 항목을 설정하는 속성 TopItem를 사용할 수 있습니다

listView1.TopItem = listView1.Items[itemIndex];//itemIndex is the index of the item 
//you want to make visible as the top item. 
+0

가상 모드에서 Items를 사용할 수 없다고 생각했습니다. 그러나 이것은 잘 작동합니다. 감사! – erict

관련 문제