2010-01-05 2 views
0

이전 게시물에서는 DataTemplate을 사용하여 단추 및 레이블 그룹을 렌더링하는 것이 좋았습니다. 멋지게 작동합니다. 문제는 이러한 Button 그룹을 여러 개 보유하고 있으며 하나의 그룹을 다른 그룹과 구별하고 싶습니다. AlternatingIndex를 사용하여 각 그룹을 다르게 색칠하려고하지만, 충분하지 않습니다. 각 그룹은 실제로 인덱스를 인쇄해야합니다.ItemsControl 항목이 추가 된 상태로 액세스

여기에 인위적인 예입니다 ...의이 항목은 다음과 같은 형태 가정 해 봅시다 : 나는이 금고의 전체 객실이있는 경우

 Lock Door 
Safe Unlock Door 
     Sound Alarm 

가, 내가 접근하고있어 어느 알고 싶습니다. 따라서,이처럼 보이도록 목록을 싶습니다

  Lock Door 
Safe #1 Unlock Door 
     Sound Alarm 

     Lock Door 
Safe #2 Unlock Door 
     Sound Alarm 

내 ItemsControl에 (리스트 박스)는 코드 숨김에서 목록에 바인딩됩니다. 그래서 여기에 몇 가지 연구를 한 후, 어떻게 든 ItemsControl.Count 속성을 바인딩해야 할 것 같습니다. 내가 가진 한 가지 아이디어는 IValueConverter를 통해 콘텐츠를 전달하는 것이 었습니다. Content는 ItemsControl.Count에 데이터 바인딩됩니다. 그런 다음 IValueConverter는 "Safe # {0}"이되도록 문자열의 서식을 지정합니다.

나는 다시 한번 비틀 거리는 데이터 바인딩 부분입니다. 이 ItemsControl에 대한 DataContext는 내 ViewModel ... 그래서 나는 ViewModel 대신 ItemsControl을 줄 바인딩을 지정해야한다고 추측 할 수 있습니다.

올바른 생각인가요? 그렇다면 누군가가 제본을 도와 줄 수 있습니까? 그렇지 않다면 어떤 다른 방법을 시도해 볼까요?

답변

3

컬렉션의 항목 인덱스를 나타내는 바인딩 속성을 제공하려면 AlternationCount 속성을 일부 큰 값 (컬렉션의 가능한 최대 항목 수보다 큼)으로 설정 한 다음 바인딩 할 수 있습니다 따라서 귀하의 데이터 템플릿 : 당신은 (때문에 AlternationCount의 큰 값의) 자동으로 인덱스를 껐다가 더 이상있어 이후

{Binding RelativeSource={RelativeSource TemplatedParent}, 
     Path=TemplatedParent.(ItemsControl.AlternationIndex)} 

또한, 당신은 코드에서 계수를 수행하기 위해 교대 카운트 컨버터를 조정할 필요가 없습니다.

+0

환상적인,이 트릭을 완전히했습니다. AlternationIndex를 사용하여 배경색을 번갈아 가며 읽었을 때 AlternationCount의 요점을 완전히 놓쳤습니다. 고맙습니다. – Dave

+0

하나의 빠른 관련 질문 - "안전"색인을 얻으려면 콘텐츠의 번호를 구문 분석해야합니까, 아니면 더 좋은 방법이 있습니까? 사용자가 단추를 클릭 할 때 항목이 선택된다는 보장이 없기 때문에 SelectedIndex를 사용할 수 없습니다. – Dave

+0

이 솔루션이 금고 색인을 제공하지 않았습니까? –

0

@Aviad : 감사합니다. 단지 완성을 위해 방금 시도한 것을 게시하고 싶었습니다. 나는 마침내 내가 제안했던 방식으로 작동하는 데이터 바인딩을 가지고 :

<Label Grid.Row="1" Grid.Column="0" Content="{Binding Path=Items.Count, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"></Label> 

최종 결과가 잘못 -리스트 박스 항목의 모든 인덱스 "4"했다가, 그래서 레이블의 모든 내용을 추측 얻는다 항목이 컨테이너에 추가 된 후 평가됩니다. 흥미 롭 군!

관련 문제