如何访问DataTemplate中的项目?

时间:2014-05-15 18:54:51

标签: c# xaml windows-runtime windows-store-apps winrt-xaml

我定义了一个像这样的ListView:

            <ListView     x:Name="libraryBooksListView"
                      AutomationProperties.AutomationId="VideoListView"
                      AutomationProperties.Name="Videos"
                      TabIndex="1"
                      Padding="0,0,4,0"
                      ItemsSource="{Binding}"
                      IsSwipeEnabled="False"
                      ItemTemplate="{StaticResource LibraryBooksItemTemplate}"
                      ItemContainerStyle="{StaticResource LibraryListViewItemStyle}"
                      Grid.Column="1"
                      SelectionMode="None">
        </ListView>

我定义了LibraryBooksItemTemplate,如下所示:

    <DataTemplate x:Key="LibraryBooksItemTemplate">
        <Grid Margin="0">

            <GridView x:Name="booksGridView"
                      AutomationProperties.AutomationId="ItemGridView"
                      AutomationProperties.Name="Grouped Items"
                      ItemsSource="{Binding Items}"
                      ItemTemplateSelector="{StaticResource textbookTemplateSelector}"
                      SelectionMode="Multiple"
                      IsItemClickEnabled="True"
                      ItemClick="booksGridView_ItemClick"
                      SelectionChanged="booksGridView_SelectionChanged"
                      IsSwipeEnabled="false"
                      ScrollViewer.VerticalScrollBarVisibility="Auto">

                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapGrid Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
            </GridView>

        </Grid>
    </DataTemplate>

GridView,booksGridView,有多个项目(书籍)。

  1. 如何修改/访问GridView的“ItemTemplateSelector”和SelectionMode等?

  2. 有没有办法访问booksGridView中的每个项目?

  3. THX

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。

  • 最简单的方法是将DataTemplate内容包装成UserControl
  • 另一个是使用像ContainerFromIndex()这样的东西。
  • 然后您还可以使用VisualTreeHelper类来浏览可视化树。
  • 然后,您可以继承ItemsControl并覆盖GetContainerForItemOverride() PrepareContainerForItemOverride()
  • 使用ItemContainerGenerator属性

需要注意的重要事项是,当覆盖或生成器提供容器以使用ItemsSource显示项目时,ItemTemplates向控件提供项目。

*编辑关于您的其他问题:

  • 如何修改/访问&#34; ItemTemplateSelector&#34;和GridView的SelectionMode等?
    你已经定义了你的选择器资源,并给了它一个&#34; textbookTemplateSelector&#34;的密钥,所以你可以用this.Resources [&#34; textbookTemplateSelector&#34;]来获取它。 SelectionMode您可以绑定到绑定DataContext的同一来源ItemsSource,并通过绑定更改或阅读。

  • 有没有办法访问booksGridView中的每个项目?
    是。由于您的DataContext设置为ItemsSource的{​​{1}},因此您可以通过ListView访问所有项目。这些项目中的每一项似乎都有一个绑定到DataContext的{​​{1}}属性,因此您可以通过自己定义的Items属性访问每个属性。

    < / LI>

答案 1 :(得分:0)

您可以使用ItemsSource:

访问它
foreach(var book in this.booksGridView.ItemsSource)
{
}