1

我有一個GridView,它由ObservableCollection填充(通過綁定)。如何設置它,以便每次將新項目添加到ObservableCollection時,GridView中的最後一項始終在其上有一個按鈕?修改GridView中的最後(或個別)項目

這是正在申請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> 

我的問題所在。我希望如果它是最後項目(並且最後一個項目會在每次添加新項目時保持更改),則上述StackPanel應該由另一個控件(例如按鈕)替換。我會如何去做這件事?

回答

1

我會擴展所有元素的模板,但隱藏附加元素,並只顯示它是否是最新元素(由最後一個元素上設置爲true的某個布爾屬性指定)。像這樣的東西。

<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> 

我認爲其他選項是改變的DataTemplate動態使用TemplateSelecting事件,變化的元素的內容,但它會多一點的工作。

雖然可能有更好的解決方案。

編輯

決定分享了上述想法在WPF

WPF Based Dynamic DataTemplateSelector提供一些鏈接(這是我在WinRT中已經使用),另一種 - 在WinRT中

使用類似的方法DataTemplateSelector - 試過稍微修改的例子,並且工作正常