C# 如何访问数据模板中的项目?
我定义了如下列表视图:C# 如何访问数据模板中的项目?,c#,xaml,windows-runtime,windows-store-apps,winrt-xaml,C#,Xaml,Windows Runtime,Windows Store Apps,Winrt Xaml,我定义了如下列表视图: <ListView x:Name="libraryBooksListView" AutomationProperties.AutomationId="VideoListView" AutomationProperties.Name="Videos" TabIndex="1"
<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>
<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>
我对LibraryBooksItemTemplate的定义如下:
<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>
<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,有多个项目(书籍)
Thx您可以使用ItemsSource访问它:
foreach(var book in this.booksGridView.ItemsSource)
{
}
有很多方法可以做到这一点
- 最简单的方法是将
内容包装到DataTemplate
中UserControl
- 另一种方法是使用类似的方法
- 然后,您还可以使用
类遍历可视化树李>VisualTreeHelper
- 然后,您可以再次对
子类化,并覆盖ItemsControl
或GetContainerForItemOverride()
或PrepareContainerForItemOverride()
- 使用属性
ItemsSource
向控件提供项,而重写或生成器提供容器以使用itemstemplates
显示项
*如需其他问题,请编辑:
- 如何修改/访问GridView的“ItemTemplateSelector”和SelectionMode等?
您已经定义了选择器资源,并给了它一个“textbookTemplateSelector”键,所以您可以使用这个来获取它。Resources[“textbookTemplateSelector”]
您可以绑定到相同的源SelectionMode
您可以将DataContext
绑定到该源,并通过绑定进行更改或读取ItemsSource
- 是否有办法访问BookGridView中的每个项目?
对由于您的
被设置为DataContext
的ListView
,因此您可以通过该ItemsSource
访问所有项目。每个项目似乎都有一个绑定到DataContext
的GridView
属性,因此您可以通过自己定义的items
属性访问每个项目items