我目前正在尝试弄清楚如何在GridView中显示不同类型的对象,例如查看此Pic:
右边的最后一个元素与其他元素不同,所以如果我将一个observablecollection绑定到GridView,我怎么能说最后一个元素以anohter布局显示。
目前我正在使用此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;
但我目前还不知道如何让最后一个元素以不同的风格出现
答案 0 :(得分:2)
简单的方法是将两种类型的对象作为不同的类(例如MoviePicStyle + MoviePlainStyle。然后将DataTemplate移出GridView,以便按类型拾取每个对象, e.g。
<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...
答案 1 :(得分:0)
使用gridview的模板选择器属性,并根据对象的类型选择模板。我在我的项目中做了同样的事情。你需要编写自己的DataTemplateSelector。
我在下面提到了链接
http://babaandthepigman.wordpress.com/2012/02/08/datatemplateselector-winrt/