C# 在wpf中有3列的listbox或listview中加载10000个图像

C# 在wpf中有3列的listbox或listview中加载10000个图像,c#,wpf,listview,mvvm,listbox,C#,Wpf,Listview,Mvvm,Listbox,现在我指的是在listbox或listview的3列中加载10000个图像 <DataTemplate x:Key="ListImageDataTemplate" DataType="{x:Type Model:FileInformation}"> <VirtualizingStackPanel Orientation="Vertical" IsVirtualizing="True" VirtualizationMode="Recycling">

现在我指的是在listbox或listview的3列中加载10000个图像

    <DataTemplate x:Key="ListImageDataTemplate" DataType="{x:Type Model:FileInformation}">
        <VirtualizingStackPanel  Orientation="Vertical"  IsVirtualizing="True" VirtualizationMode="Recycling">
            <Grid HorizontalAlignment="Left" Width="230" Height="230">
                <Border Padding="5" Margin="10" BorderBrush="Orange">
                    <Image Stretch="Fill"  HorizontalAlignment="Center" >
                        <Image.Source>
                            <PriorityBinding>
                                <Binding Path="FastBitmap"></Binding>
                                <Binding Converter="{StaticResource InstantiatePropertyAsyncConverterKey}"></Binding>
                            </PriorityBinding>
                        </Image.Source>
                    </Image>

                </Border>

                <StackPanel VerticalAlignment="Bottom" Background="Black" Opacity="0.70" Width="200">
                    <TextBlock Text="{Binding FileInfo.Name}" Foreground="White" Height="60" Margin="15,0,15,0" FontWeight="SemiBold"/>
                </StackPanel>
            </Grid>
        </VirtualizingStackPanel>
    </DataTemplate>
</Window.Resources>

    <ListView  Name="lstBox1" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.IsVirtualizing="False" ItemsPanel="{DynamicResource ImageGalleryItemsPanelTemplate}" ItemTemplate="{Binding Source={StaticResource ListImageDataTemplate}}" ItemsSource="{Binding Path=ImageList}"  Margin="0,10,18,-10" Grid.Row="0" Grid.Column="1"/>
但是,如果在同一个项目中添加3列,从下到上加载图像,则在1列中非常有用。将所有图像加载到listview需要5到7秒

    <DataTemplate x:Key="ListImageDataTemplate" DataType="{x:Type Model:FileInformation}">
        <VirtualizingStackPanel  Orientation="Vertical"  IsVirtualizing="True" VirtualizationMode="Recycling">
            <Grid HorizontalAlignment="Left" Width="230" Height="230">
                <Border Padding="5" Margin="10" BorderBrush="Orange">
                    <Image Stretch="Fill"  HorizontalAlignment="Center" >
                        <Image.Source>
                            <PriorityBinding>
                                <Binding Path="FastBitmap"></Binding>
                                <Binding Converter="{StaticResource InstantiatePropertyAsyncConverterKey}"></Binding>
                            </PriorityBinding>
                        </Image.Source>
                    </Image>

                </Border>

                <StackPanel VerticalAlignment="Bottom" Background="Black" Opacity="0.70" Width="200">
                    <TextBlock Text="{Binding FileInfo.Name}" Foreground="White" Height="60" Margin="15,0,15,0" FontWeight="SemiBold"/>
                </StackPanel>
            </Grid>
        </VirtualizingStackPanel>
    </DataTemplate>
</Window.Resources>

    <ListView  Name="lstBox1" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.IsVirtualizing="False" ItemsPanel="{DynamicResource ImageGalleryItemsPanelTemplate}" ItemTemplate="{Binding Source={StaticResource ListImageDataTemplate}}" ItemsSource="{Binding Path=ImageList}"  Margin="0,10,18,-10" Grid.Row="0" Grid.Column="1"/>

    <DataTemplate x:Key="ListImageDataTemplate" DataType="{x:Type Model:FileInformation}">
        <VirtualizingStackPanel  Orientation="Vertical"  IsVirtualizing="True" VirtualizationMode="Recycling">
            <Grid HorizontalAlignment="Left" Width="230" Height="230">
                <Border Padding="5" Margin="10" BorderBrush="Orange">
                    <Image Stretch="Fill"  HorizontalAlignment="Center" >
                        <Image.Source>
                            <PriorityBinding>
                                <Binding Path="FastBitmap"></Binding>
                                <Binding Converter="{StaticResource InstantiatePropertyAsyncConverterKey}"></Binding>
                            </PriorityBinding>
                        </Image.Source>
                    </Image>

                </Border>

                <StackPanel VerticalAlignment="Bottom" Background="Black" Opacity="0.70" Width="200">
                    <TextBlock Text="{Binding FileInfo.Name}" Foreground="White" Height="60" Margin="15,0,15,0" FontWeight="SemiBold"/>
                </StackPanel>
            </Grid>
        </VirtualizingStackPanel>
    </DataTemplate>
</Window.Resources>

    <ListView  Name="lstBox1" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.IsVirtualizing="False" ItemsPanel="{DynamicResource ImageGalleryItemsPanelTemplate}" ItemTemplate="{Binding Source={StaticResource ListImageDataTemplate}}" ItemsSource="{Binding Path=ImageList}"  Margin="0,10,18,-10" Grid.Row="0" Grid.Column="1"/>
从listview中,它在1列中加载图像,工作正常,但通过使用ImageGalleryItemsPanelTemplate添加3列

    <DataTemplate x:Key="ListImageDataTemplate" DataType="{x:Type Model:FileInformation}">
        <VirtualizingStackPanel  Orientation="Vertical"  IsVirtualizing="True" VirtualizationMode="Recycling">
            <Grid HorizontalAlignment="Left" Width="230" Height="230">
                <Border Padding="5" Margin="10" BorderBrush="Orange">
                    <Image Stretch="Fill"  HorizontalAlignment="Center" >
                        <Image.Source>
                            <PriorityBinding>
                                <Binding Path="FastBitmap"></Binding>
                                <Binding Converter="{StaticResource InstantiatePropertyAsyncConverterKey}"></Binding>
                            </PriorityBinding>
                        </Image.Source>
                    </Image>

                </Border>

                <StackPanel VerticalAlignment="Bottom" Background="Black" Opacity="0.70" Width="200">
                    <TextBlock Text="{Binding FileInfo.Name}" Foreground="White" Height="60" Margin="15,0,15,0" FontWeight="SemiBold"/>
                </StackPanel>
            </Grid>
        </VirtualizingStackPanel>
    </DataTemplate>
</Window.Resources>

    <ListView  Name="lstBox1" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.IsVirtualizing="False" ItemsPanel="{DynamicResource ImageGalleryItemsPanelTemplate}" ItemTemplate="{Binding Source={StaticResource ListImageDataTemplate}}" ItemsSource="{Binding Path=ImageList}"  Margin="0,10,18,-10" Grid.Row="0" Grid.Column="1"/>
<ItemsPanelTemplate x:Key="ImageGalleryItemsPanelTemplate">
        <UniformGrid Columns="3"   HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></UniformGrid>
    </ItemsPanelTemplate>


有人能帮我吗?

如果你不告诉我们这个问题,有人该怎么帮你?;)有什么东西不起作用了,还是只是为了减速?应该多快?我想问题很清楚。虚拟化适用于1列,但不适用于1列以上的列。它正在工作,但正在将图像从底部listviewitem加载到顶部listviewitem。我需要从上到下加载图像,否则图像应在scrolling@Manjunath你能粘贴1列和3列的代码以查找差异吗>有没有办法存档这个问题@Peuczyński
    <DataTemplate x:Key="ListImageDataTemplate" DataType="{x:Type Model:FileInformation}">
        <VirtualizingStackPanel  Orientation="Vertical"  IsVirtualizing="True" VirtualizationMode="Recycling">
            <Grid HorizontalAlignment="Left" Width="230" Height="230">
                <Border Padding="5" Margin="10" BorderBrush="Orange">
                    <Image Stretch="Fill"  HorizontalAlignment="Center" >
                        <Image.Source>
                            <PriorityBinding>
                                <Binding Path="FastBitmap"></Binding>
                                <Binding Converter="{StaticResource InstantiatePropertyAsyncConverterKey}"></Binding>
                            </PriorityBinding>
                        </Image.Source>
                    </Image>

                </Border>

                <StackPanel VerticalAlignment="Bottom" Background="Black" Opacity="0.70" Width="200">
                    <TextBlock Text="{Binding FileInfo.Name}" Foreground="White" Height="60" Margin="15,0,15,0" FontWeight="SemiBold"/>
                </StackPanel>
            </Grid>
        </VirtualizingStackPanel>
    </DataTemplate>
</Window.Resources>

    <ListView  Name="lstBox1" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.IsVirtualizing="False" ItemsPanel="{DynamicResource ImageGalleryItemsPanelTemplate}" ItemTemplate="{Binding Source={StaticResource ListImageDataTemplate}}" ItemsSource="{Binding Path=ImageList}"  Margin="0,10,18,-10" Grid.Row="0" Grid.Column="1"/>