修改GridView中的最后一个(或单个)项
本文关键字:单个 最后一个 GridView 修改 | 更新日期: 2023-09-27 18:20:15
我有一个GridView
,它由ObservableCollection
填充(通过绑定)。如何设置它,以便每次向ObservableCollection
添加新项目时,GridView中的最后一个项目的顶部总是有一个按钮?
这是GridView的ItemTemplate 的XAML
<GridView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Left" Width="250" Height="250">
<Border Background="White">
<Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="60" Margin="15,0,15,0"/>
<TextBlock Text="{Binding DateMade}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
我的问题在于这个模板被应用于GridView中的所有项。我希望它是最后一个项目(每次添加新项目时,最后一个项目都会不断更改),上面的StackPanel
应该被另一个控件(比如按钮)取代。我该怎么做?
我会扩展所有元素的模板,但隐藏额外的元素,并且只在它是最新的元素时显示它(由在最后一个元素上设置为true的某个bool属性指定)。像这样的东西。
<GridView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Left" Width="250" Height="250">
<Border Background="White">
<Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<Button Visibility="{Binding IsLastElement, Converter={StaticResource BoolToVisibilityConverter}}"/>
<StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="60" Margin="15,0,15,0"/>
<TextBlock Text="{Binding DateMade}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
我认为另一种选择是使用TemplateSelecting事件动态更改DataTemplate,更改元素的内容,但这将需要更多的工作。
也许还有更好的解决方案。
编辑
决定分享上述想法的一些链接(我在WinRT中使用过)和WPF 中的另一个链接
基于WPF的动态数据模板选择器-在WinRT 中使用类似方法
DataTemplateSelector-尝试了一个稍微修改过的示例,并且运行良好