我正在使用C#/ XAML开发Windows Store App。我主要在iOS方面有经验,在某种程度上也有Android应用程序开发方面的经验,但对C#/ XAML世界还不太满意。
这是我在基于GridView的页面中的问题(基于VS2012生成的漂亮模板)。
我有一个gridview,它的集合绑定到从网络检索的数据,并且工作正常。但是我想根据数据更改网格项。例如:我有一些文件和文件夹,我想使用不同的网格视图项目来显示。
我的问题:我将如何根据数据对ItemTemplate使用不同的DataTemplate?例如,对于“文件夹”,我将只有一个垂直居中的文本块,对于文件,我将有2个文本块并且在视觉上有所不同。
我是走正确的道路还是应该做完全不同的事情?
XAML部分是
<GridView
x:Name="itemGridView"
AutomationProperties.AutomationId="ItemGridView"
AutomationProperties.Name="Grouped Items"
Grid.RowSpan="3"
Padding="116,137,40,46"
ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
ItemTemplate="{StaticResource FileEntriesTemplate}"
ItemClick="ItemView_ItemClick"
IsItemClickEnabled="True"
SelectionMode="None"
IsSwipeEnabled="false">
模板是
<DataTemplate x:Key="FileEntriesTemplate">
<Grid HorizontalAlignment="Left" Width="400" Height="80" Background="Beige">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding Image}" Stretch="Uniform" Grid.Column="0" Margin="10,0,0,0" AutomationProperties.Name="{Binding Title}"/>
<StackPanel Orientation="Vertical" Grid.Column="1" Background="Transparent">
<TextBlock Text="{Binding Title}" Foreground="Black" Style="{StaticResource LargeTitleTextStyle}" Margin="20,20,10,0"/>
<TextBlock Text="{Binding Subtitle}" Foreground="gray" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="20,10,0,30"/>
</StackPanel>
</Grid>
GridView通过ItemTemplateSelector属性公开此属性,您可以创建一个从DataTemplateSelector继承的类。一个例子是我有一个GridView绑定了“问题”和“存储库”,并且希望为每个视图使用不同的数据模板。
我的数据模板选择器如下所示:
public class IssueSummaryTemplateSelector : DataTemplateSelector
{
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return item is IssueGroupViewModel ? IssueTemplate : RepositoryTemplate;
}
public DataTemplate RepositoryTemplate
{
get;
set;
}
public DataTemplate IssueTemplate
{
get;
set;
}
}
然后,我将选择器声明为xaml中的资源,分配要用于存储库和问题的两个模板。
<selectors:IssueSummaryTemplateSelector x:Key="IssueSummarySelector"
IssueTemplate="{StaticResource IssueGridZoomedOutTemplate}"
RepositoryTemplate="{StaticResource IssueGridRepositoryZoomedOutTemplate}"/>
然后,您可以在GridView上使用它。
<GridView ItemTemplateSelector="{StaticResource IssueSummarySelector}" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句