2012-03-08 4 views
0

VS11에서 제공하는 C++ Metro 앱 템플릿 인 "Grid Application"을 가지고 놀고 있습니다.VirtualizingStackPanel에서 항목 참조하기

<ScrollViewer x:name="itemGridScrollViewer"> 
    <GridView x:name="itemGridView"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
     <VirtualizingStackPanel /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    </GridView> 
</ScrollViewer> 

실제 상품 StandardStyles.xaml에 정의 Standard250x250ItemTemplate 데이터 템플릿을 사용하여 표시된다 : 메인 디스플레이는 VirtualizingStackPanel 표시 항목의 집합이다. 이 디스플레이 요소 중 하나는 그래픽입니다.

런타임시 그래픽을 변경할 수 있도록 특정 항목을 참조하는 방법을 이해하려고합니다. ScrollViewer와 GridView는 그것들과 관련된 객체를 가지고 있으므로 그 객체에 접근 할 수는 있습니다.하지만 거기에서 개별 항목으로 이동하는 방법을 알지 못합니다.

이 모든 것들은 내게 완전히 새로운 것이므로 부드럽게 다루십시오. :)

답변

0

일반적으로 ItemsControl의 개별 템플릿 항목을 파고 들기는 쉽지 않을뿐만 아니라 ItemTemplate이 다른 시간 (가상화, 소스 수집 업데이트 중 페이징)에서 재생성 할 수 있기 때문에 좋은 생각이 아닙니다. 더 이상 표시되지 않는 오래된 UIElement를 보유하게됩니다.

더 나은 방법은 필요한 데이터를 항목 데이터로 가져오고 ItemTemplate에서 데이터 바인딩을 사용하여 UI를 구별하는 데 필요한 모든 변경 작업을 수행하는 것입니다. 이미 선언 된 내가 컨버터 코드가 기록되어 있으리라 믿고있어 여기

<GridView> 
    <GridView.ItemTemplate> 
    <DataTemplate> 
     <Image Source="{Binding Path=DataState, Converter={StaticResource MyStateToImageConverter}}"/> 
    </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

및 컨버터의 인스턴스 : 하나의 옵션은 항목 데이터의 일부 상태에 따라 다른 이미지를 얻기 위해 IValueConverter을 사용하는 것입니다 리소스 (see here)로 또는 각 항목의 데이터에서 해당 이미지를 지정하고 변환기 부분을 건너 뛰는 속성에 대한 직접 바인딩을 수행 할 수 있습니다.