2012-03-08 14 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に表示される項目の集合です。これの表示要素の1つはグラフィックです。

実行時にグラフィックを変更できるように、特定のアイテムを参照する方法を理解しようとしています。 ScrollViewerとGridViewにはオブジェクトが関連付けられているので、それらにアクセスできますが、そこから個々のアイテムに移動する方法はわかりません。

これらのものはすべて私には全く新しいものなので、優しいものにしてください。 :)

答えて

0

一般的に、痛みだけでなく、ItemTemplateが異なるタイミングで再生成できるため(仮想化中のページング、ソースコレクションの更新など)、ItemsControl内の個々のテンプレート化アイテムを掘り下げるのは良い考えではありません。表示されなくなった古いUIElementを保持したままになります。

より良い方法は、必要なデータをアイテムデータに引き出し、ItemTemplateでデータバインディングを使用して、UIを区別するために必要な変更を加えることです。 1つのオプションは、アイテムデータにいくつかの状態に応じて、異なる画像を取得するためにIValueConverterを使用することです:

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

私は、コンバータのコードが書かれていることを仮定していると、コンバータのインスタンスが既に宣言されていますリソースとして(see here)。代わりに、画像を指定してコンバータの部分をスキップする各アイテムのデータのプロパティに直接バインディングを行うこともできます。

関連する問題