如何改变GridView.ItemTemplate,当应用正在运行时

本文关键字:应用 运行时 ItemTemplate GridView 何改变 改变 | 更新日期: 2023-09-27 18:06:31

在我的应用程序中,我有GridView和ComboBox页面。我想改变GridView。根据组合框中选定的项目设置ItemTemplate属性。我应该如何实现它?

顺便说一句,我知道这个问题,但它很老了,看起来不像"最佳实践"。(ui控件的可见性/不可见性如何影响cpu/gpu负载?)

我的显示数据表格:

<GridView x:Name="gridViewMain" Grid.Row="1" SelectionMode="None" IsItemClickEnabled="True"
              ItemsSource="{Binding CurrentList}" ItemTemplate="{StaticResource gridViewMainItemTemplate}"
              Loaded="gridViewMain_Loaded" LayoutUpdated="gridViewMain_LayoutUpdated">
        <interactivity:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="ItemClick">
                <core:CallMethodAction MethodName="GridViewClick"
                                       TargetObject="{Binding Mode=OneWay}" />
            </core:EventTriggerBehavior>
        </interactivity:Interaction.Behaviors>
    </GridView>

我的一个模板:

<DataTemplate x:Key="gridViewMainItemTemplate">
        <Grid x:Name="gridATemplate" Width="185" Height="288">
            <Image x:Name="imgATemplate" Source="{Binding image_url}" Stretch="UniformToFill"
                   HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Grid Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Bottom">
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock x:Name="textBlockTitle" Text="{Binding title}"
                           TextWrapping="Wrap" Style="{StaticResource BodyTextBlockStyle}" Margin="5,0,0,0"
                           Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Foreground="White" FontWeight="Bold"
                           MaxHeight="50" />
                <TextBlock x:Name="textBlockType" TextWrapping="Wrap" Style="{StaticResource BodyTextBlockStyle}"
                           Margin="5,0,0,0"
                           Grid.Column="0" Grid.Row="1" Foreground="White" Text="{Binding type}" FontWeight="Bold" />
                <StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal">
                    <TextBlock x:Name="textBlockProgressL" TextWrapping="Wrap"
                               Style="{StaticResource BodyTextBlockStyle}" FontWeight="Bold" Foreground="White"
                               Text="Progress:" />
                    <TextBlock x:Name="textBlockProgressV" TextWrapping="Wrap"
                               Style="{StaticResource BodyTextBlockStyle}" FontWeight="Bold" Foreground="White"
                               Text="{Binding watched_episodes}" Margin="10,0,0,10" />
                </StackPanel>
            </Grid>
        </Grid>
    </DataTemplate>

如何改变GridView.ItemTemplate,当应用正在运行时

你当然可以做到!在XAML中,您可以做任何事情。您不能做的是在不重新渲染的情况下动态更改模板。记住,这就像告诉你的打印机使用卡纸一样。它会服从的。如果你把设置改为使用笔记本纸,它也会服从。你只需要再打印一次,因为它已经打印在卡片上了。

有几种方法可以让你重新渲染GridView。一种方法是离开页面再导航回来。在你的情况下,这听起来不太理想。在您的场景中,很可能只需要重置您正在使用的ObservableCollection。这样的:

void Reset<T>(ObservableCollection<T> collection)
{
    var original = collection.ToArray();
    collection.Clear();
    foreach (var item in original)
        collection.Add(item);
}
祝你好运!

您需要使用datatemplateselector

http://blogs.msdn.com/b/bryanbolling/archive/2012/12/08/how-to-control-the-datatemplateselector-in-windows-store-apps.aspx

您可以创建多个项目模板,并根据任何条件选择显示哪个项目模板。

当选择改变时,你必须刷新gridview。
相关文章: