我有30000张图片,现在我需要一个控件,可以显示图像(不仅仅是文件路径的图片)及其文件名。
需要某种分页,例如30页图片,我想到了GridView?!
我有一个包含Hashtable的列表(键:该图片的转义路径,值:图片名称),我有一个绑定到该哈希表的GridView,但它只显示文件路径。
C#:
wordListView.ItemsSource = Hsh;// contains a property of Hahstable;
XAML:
<DataGrid x:Name="wordListView" HorizontalAlignment="Left" VerticalAlignment="Top" Height="260" Width="645" Margin="10,156,0,0">
<!--AutoGenerateColumns="False" ItemsSource="{Binding}">-->
<!--<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="ID" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding Path}" Header="Path"/>
<DataGridTextColumn Binding="{Binding TimeStamp}" Header="TimeStamp"/>
</DataGrid.Columns>-->
</DataGrid>
答案 0 :(得分:0)
如果您尝试一次将所有图像加载到内存中,性能将会很糟糕。因此,您可以使用虚拟化仅加载那些可见(或刚刚离开屏幕)的虚拟化,并在用户滚动以使其可见时加载其他虚拟化。
This answer包含一些示例代码。简而言之,您需要将ItemsPanel
设置为VirtualizingStackPanel
:
<ItemsControl
VirtualizingStackPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding ImageSource}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
您可以阅读有关optimising performance on MSDN here的更多信息。