2011-09-28 8 views
3

잠재적으로 많은 수의 항목을 포함 할 수있는 목록 상자가 있습니다. 데이터 가상화를 처리하기 위해 ObservableCollection과 동일한 인터페이스를 구현하는 컬렉션을 작성하여 WPF의 UI 가상화에 연결하고 필요에 따라 지원 데이터를 회전시킬 수 있습니다.목록 상자 데이터 가상화 및 다중 선택

잘 작동합니다. 문제는 목록 상자에 다중 선택을 도입했을 때입니다. listbox는 인덱스 (SelectedItems)가 아닌 객체별로 선택된 항목을 관리하기 때문에 모든 항목을 선택하면 목록 상자에서 모든 보조 데이터가 스핀 업되고 메모리에 보관되어 데이터 가상화를 무효화합니다.

ListBox를 다시 작성하는 대신 오브젝트 대신 인덱스를 사용하여 선택을 관리하는 것 이외의 일이 발생하지 않도록하는 방법은 무엇입니까?

감사합니다.

Eric

+0

필요에 따라 아이템을로드하고 싶기 때문에 원하는 것을 정확하게 얻은 것 같습니다. "모두 선택"하려면로드해야합니다. 맞습니까? TBH, 나는 목록 상자의 CTRL-A (모두 선택)를 무시하고 아무 것도하지 않는 명령 (기본적으로 해제)에 연결합니다. 바인딩을 통해이 작업을 수행 할 수 있는지 또는 목록 상자의 하위 클래스를 파생해야하는지 여부는 확실하지 않습니다. –

+0

아닙니다. 실제로 볼 수있는 항목 만 데이터를로드하려고하지만 목록이 표시 될 때 선택되도록 항목이 오프 스크린 인 경우에도 목록 상자에서 선택된 인덱스 목록을 유지하려고합니다. 나는 사용자가 ctrl-a도 사용할 수있게하고 싶습니다. 모든 항목을 선택하지 못하도록하고 싶지 않습니다. – esc861

+0

죄송합니다. 코드를 게시 할 권한이 없지만 유사한 상황이있어서 ListView로 이동 한 것입니다.하지만 ListBox를 사용하여 수행 할 수 있다고 생각합니다. CheckBox를 사용하여 템플릿을 하나 선택하여 사용하십시오. 그렇게하면 항목 수준에서 선택 (선택)을 처리하고 ListBox에서 선택한 항목의 모음을 관리하지 않아도됩니다. Check 이벤트 처리에 대한 더 나은 제어를 위해이 작업을 수행했지만 가상화 작업에서도 문제가 없다고 생각합니다. LostFocus 이벤트와 마찬가지로 UpdateSourceTrigger = PropertyChanged를 사용하면 ListItem에 문제가있을 수 있습니다. – Paparazzi

답변

0

우리 데이터 가상화를 제어하기 위해 UI 가상화를 사용했지만,리스트 박스 그래서 우리의 데이타가 언로드되지 않는 한, 선택 붙잡고 문제가 있었다.

내가 끝낸 것은 가상화 스택 패널의 항목 생성기를 묶어서 생성 된 컨테이너의 데이터 컨텍스트 변경 이벤트를 수신하는 것이 었습니다. 이런 일이 생기면 래퍼에서 실제 데이터를 언로드했습니다.

0

UI 컨트롤에서 가상화 옵션을 사용하지 않는 이유는 무엇입니까? 이렇게하면 화면에 표시 할 데이터 만로드됩니다.

http://www.kirupa.com/net/ui_virtualization_pg1.htm

+0

이 접근법은 많은 항목, 예를 들어 70K를 다중 선택 할 수 있습니까? – Wolf

+0

UI가 한 번에 많은 항목을 선택하려는 이유/방법을 모르겠습니다. 그러나, 왜 그것을 처리 할 수 ​​없을지 모르겠다. 항목을 UI를 통해 수동으로 선택하거나 (영원히 가져옴) 코드 호출을 통해 선택합니다. 가상화는 화면에 컨트롤을 표시하는 경우에만 적용되며 컨트롤 자체는 아니며 메모리의 데이터를 백업하는 데는 적용되지 않습니다. – tsells

+0

좋아, 방금 데이터를위한 텍스트로 인덱스를 사용하여 백만 항목으로 시도했습니다. 모두 선택 ([Home], [Shift] [Ctrl] [End])은 매우 빠르게 작동합니다.BTW : 로그 파일의 내용을 표시하는 데 가상화 된 목록 상자를 사용합니다. 이제는 사용자가 일부를 클립 보드에 복사 할 수 있어야합니다. – Wolf