我定义了一个像这样的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,有多个项目(书籍)。
如何修改/访问GridView的“ItemTemplateSelector”和SelectionMode等?
有没有办法访问booksGridView中的每个项目?
THX
答案 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
属性访问每个属性。
答案 1 :(得分:0)
您可以使用ItemsSource:
访问它foreach(var book in this.booksGridView.ItemsSource)
{
}