wpf itemscontrol 예제

우리는 이것을 훨씬 더 걸릴 수 있습니다. 세계 지도에 각 아이템을 표시하려면 어떻게 해야 할까요? 가장 먼저 필요한 것은 각 장소에 대한 경도와 위도입니다. 이를 위해 PlaceViewModel에 적절한 속성을 추가하고 Google을 사용하여 해당 속성을 채울 수 있습니다. 예를 들어, 여기에 런던에 대 한 새로운 생성자 호출: 고맙게도, ItemsControl 이 곤경에서 우리를 돕기 위해 AlternationCount 및 AlternationIndex 속성을 제공 합니다. 이러한 두 속성은 함께 작동합니다: AlternationCount를 사용하면 AlternationIndex를 다시 0으로 재설정하기 전에 계산할 항목 수를 지정할 수 있으며 AlternationIndex(연결된 속성)는 특정 항목 컨테이너가 할당된 인덱스를 알려줍니다. 예를 들어 AlternationCount를 2로 설정하면 첫 번째 항목에 AlternationIndex 0이 있고 두 번째 항목에는 AlternationIndex 1이 있고 세 번째 항목에는 AlternationIndex 0이 다시 표시됩니다. 목록의 모든 항목에 대해 광고 메스꺼움을 반복하세요. 이 것의 업샷은 이제 항목 컨테이너에 다른 시각적 개체를 트리거하는 데 사용할 수 있는 AlternationIndex가 있다는 것입니다. ItemsControl을 채우기 위해 IEnumerable을 구현하는 개체를 사용하지 않으려면 Items 속성을 사용하여 항목을 추가할 수 있습니다. ItemsControl의 항목에는 다른 유형이 있을 수 있습니다. 예를 들어 ListBox에는 문자열인 항목과 이미지인 다른 항목이 포함될 수 있습니다. ItemsControl은 HasItems 속성을 제공하지만 사용되지 는 않습니다. 사용 가능한 데이터를 기반으로 UI 변경을 트리거해야 하는 경우 뷰 모델에서 이러한 요구 사항을 모델링하는 것이 좋습니다.

이렇게 하면 보다 중앙 집중화된 논리와 더 큰 유연성(예: 항목이 하나뿐일 때 알아야 할 사항)을 제공할 뿐만 아니라 이러한 시나리오도 테스트할 수 있습니다. 다음은 슬라이더 컨트롤을 사용하여 ItemsControl에서 많은 이미지의 크기를 조정하는 예제입니다. 이미지는 둘러싸기 패널 내에 표시됩니다. 크기가 조정되면 WrapPanel이 자동으로 레이아웃을 업데이트하여 이미지를 표시하는 데 필요한 행 수가 변경되도록 합니다. ItemControl에 대한 새 ItemContainerStyle을 정의할 때 일반적으로 사용하는 한 가지 방법은 현재 선택한 항목 또는 마우스가 현재 끝난 항목으로 특별한 작업을 수행하는 것입니다. 예를 들어 ListBox의 ItemContainerStyle으로 사용되는 기본 템플릿은 선택한 항목과 마우스가 현재 위에 있는 항목 모두에 대한 배경과 테두리를 변경합니다. 기본적으로 사용하지 않는 컨트롤에서 UI 가상화를 사용하도록 설정하는 핵심은 ItemsPanel에 대한 가상화 패널을 사용하고 IsVirtualizing 속성을 true로 설정하는 것입니다. UI 가상화를 방해하는 몇 가지 작업을 실수로 수행할 수 있으므로 주의하십시오. 예를 들어 데이터 바인딩을 사용하는 대신 수동으로 항목을 추가하고 이기종 항목 컨테이너(예: 동일한 메뉴에서 MenuItem 및 구분 기호 혼합)를 추가하면 UI 가상화가 자동으로 비활성화됩니다. 불행히도 그렇게 간단하지 않습니다.

위의 예제에는 그리드 행당 단일 항목이 있으며, 일반적으로 각 항목이 다른 열에 배치된 각 행에 여러 항목을 두려고 합니다. 이것은 까다로운 가져옵니다. DataTemplate는 단일 자식 요소만 지원하므로 그리드에 추가할 요소를 일종의 패널로 래핑해야 합니다. 그러나 이렇게 하면 Grid가 직접 하위 항목의 행 및 열 속성만 지정하기 때문에 각 행의 요소에 적용하는 열 인덱스는 무시됩니다. 리소스 섹션에서 DataTemplate를 정의하는 것이 더 일반적이므로 다음 예제와 같이 재사용 가능한 개체가 될 수 있습니다.