2016-07-21 5 views
1

私はUWPアプリケーションで作業しています。私は、ページ内のListViewのすべてのListViewItemを繰り返し処理したい。 ListViewのxamlを次に示します。ListViewのDataTemplateにDataTypeが設定されている場合、ListViewItemsにアクセスする方法は?

<ListView x:Name="DownloadTaskListView" 
        ItemsSource="{x:Bind ViewModel.CompletedDownloads}" 
        HorizontalContentAlignment="Stretch" 
        Background="{x:Null}"> 
      <ListView.ItemTemplate> 
       <DataTemplate x:DataType="data:DownloadTask"> 
        <Grid x:Name="ItemViewGrid" Background="{x:Null}" Margin="4,0,0,0"> 
        .... 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalAlignment" Value="Stretch" /> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
        <Setter Property="BorderThickness" Value="0" /> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 

私はこれを達成するためにこのコードを使用します。

foreach(ListViewItem item in DownloadTaskListView.Items) 
{ 
    // Do something useful 

} 

しかし、それは私に例外を与えました。私はDataTemplateのDataTypeを設定しているので、ランタイムは、DownloadTask(この場合はデータ型)からListViewItemに変換できないという例外をスローします。だから私はListViewItemsにアクセスするもう1つの方法は何かを聞きたいのですが?

答えて

3

次に、あなたの場合には、それはGridだ、このコンテナのルート要素を取得し、指定された項目に対応するコンテナを検索するためにItemsControl.ContainerFromItem methodを使用することができます。たとえば、次のように:

private void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    foreach (var item in DownloadTaskListView.Items) 
    { 
     var listviewitem = item as DownloadTask; 
     var container = DownloadTaskListView.ContainerFromItem(listviewitem) as ListViewItem; 
     var ItemViewGrid = container.ContentTemplateRoot as Grid; 
     //TODO: 
    } 
} 

ちょうどあなたがあなたのリストビューのSelectionChanged場合には、このメソッドを使用したい場合は、あなただけのそれ以外の場合は、ListBoxItemを見つけることができません、ContainerFromItem方法に選択されたアイテムを渡すことができることに注意してください。

私はそれが可能な場合、データバインディングを使用して優れている、と言うべきです。

+0

ありがとうグレース、それは動作します。私は開発の新しい、緩い終わりを結びつけるだろう:) –

0

ItemsSourceをViewModel.CompletedDownloadsとして設定しているので、は同じにItemループを実行します。

foreach(var Items in ViewModel.CompletedDownloads) 
{ 
    //Do Something Useful. 
} 
+0

応答のおかげで、私は、私はそうで視認性とIsSelectedプロパティを設定するようなものを行うためのUIを表してのListViewItemをループにしたい、データソースを反復処理する必要はありません。 –

関連する問題