2

我目前正在尝试弄清楚如何在 GridView 中显示不同类型的对象,例如看这张图片:

右侧的最后一个元素与其他元素不同,所以如果我将一个 observablecollection 绑定到 GridView,我怎么能说最后一个元素显示在另一个布局中。

目前我正在使用这个 XAML 代码

<GridView x:Name="startView" ItemsSource="{Binding}" Grid.Column="1" Grid.Row="2" SelectionMode="None" Width="Auto">
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock x:Name="DetailTitle" Height="74" Text="{Binding Title}" />
                            <Image x:Name="Image" Height="Auto" Width="Auto" Margin="0" Stretch="None" Source="{Binding LocalCoverUrl}" Visibility="Collapsed" />
                        </StackPanel>
                    </DataTemplate>
                </GridView.ItemTemplate>
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="2" />
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
            </GridView>

后面的代码:

ObservableCollection<Movie> recentlyStarted = await Api.RecentlyStarted(3);
startView.DataContext = recentlyStarted;

但我目前不知道如何让最后一个元素以不同的样式显示

4

2 回答 2

2

简单的方法是将这两种类型的对象作为不同的类(例如 MoviePicStyle + MoviePlainStyle。然后将您的 DataTemplate 移出 GridView,以便按类型选择每个对象,例如

<Window.Resources>
  <DataTemplate DataType="{x:Type ViewModel:MoviePicStyle}">
    <StackPanel>
       <TextBlock x:Name="DetailTitle" Height="74" Text="{Binding Title}" />
       <Image x:Name="Image" Height="Auto" Width="Auto" Margin="0" Stretch="None" Source="{Binding LocalCoverUrl}" Visibility="Collapsed" />
    </StackPanel> 
  <DataTemplate DataType="{x:Type ViewModel:MoviePlainStyle}">
      ...Different View...
  </DataTemplate>
</Window.Resources>
<GridView...
于 2012-09-20T10:15:13.540 回答
-1

使用 gridview 的模板选择器属性,并根据对象的类型选择模板。我在我的项目中做了同样的事情。您需要编写自己的 DataTemplateSelector。

我在下面提到了链接

http://babaandthepigman.wordpress.com/2012/02/08/datatemplateselector-winrt/

于 2012-09-20T11:42:36.580 回答