Windows StoreApp XAML:根据数据类型更改GridView中的ItemTemplate

Windows StoreApp XAML:根据数据类型更改GridView中的ItemTemplate,xaml,windows-store-apps,Xaml,Windows Store Apps,我正在使用C#/XAML开发Windows应用商店应用程序。我主要在iOS和Android应用程序开发方面有经验,但对C#/XAML world还不太熟悉 这是我在基于GridView的页面中遇到的问题(基于VS2012生成的尼斯模板) 我有一个gridview,它的集合绑定到从网络检索到的数据,并且工作正常。 但我想根据数据更改网格项。 例如:我有一些文件和文件夹,我想使用不同的网格视图项来显示它们 我的问题:如何根据数据为ItemTemplate使用不同的DataTemplate?例如,对于

我正在使用C#/XAML开发Windows应用商店应用程序。我主要在iOS和Android应用程序开发方面有经验,但对C#/XAML world还不太熟悉

这是我在基于GridView的页面中遇到的问题(基于VS2012生成的尼斯模板)

我有一个gridview,它的集合绑定到从网络检索到的数据,并且工作正常。 但我想根据数据更改网格项。 例如:我有一些文件和文件夹,我想使用不同的网格视图项来显示它们

我的问题:如何根据数据为ItemTemplate使用不同的DataTemplate?例如,对于“文件夹”,我将只有一个垂直居中的文本块,对于文件,我将有两个文本块,视觉上不同

我走的是正确的道路,还是应该做完全不同的事情

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属性公开了这一点,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}" />

GridView通过ItemTemplateSelector属性公开了这一点,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}" />


谢谢你的代码!。我使用了你帖子中的关键词来获取代码!谢谢!。我使用了你帖子中的关键词来获得