1

我在我的 WPF 应用程序中显示了大约 1000 多个图像。所有这些图像都使用“GroupID”属性进行分组。因为我必须照顾内存,所以我使用了VirtualizingStackPanel,其次我使用WrapPanel根据我的 ListView 累积的空间显示所有这些图像。

我的解决方案适用于少量图像,并且 WPF 包装面板在项目分组时删除了虚拟化效果。因此我用谷歌搜索了这个问题,发现我们可以使用VirtualWrapPanel

我试过了,但我开始得到异常

“_owner 为空。” 在 VirtualWrapPanel “_owner.InvalidateScrollInfo();”

主窗口.cs

        List<SearchData> myData = new List<SearchData>();
        GetData(ref myData);
        listView.ItemsSource = myData;

        //Grouping code
        CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(myData);
        PropertyGroupDescription groupDescription = new PropertyGroupDescription("GroupId");
        view.GroupDescriptions.Add(groupDescription);    

主窗口.cs

    <Window x:Class="WpfItemVirtualization.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfItemVirtualization"
    xmlns:dz="clr-namespace:DevZest.Windows.DataVirtualization;assembly=DevZest.DataVirtualization"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>

    <Style TargetType="ListViewItem">
        <Setter Property="dz:VirtualListItemBase.AutoLoad" Value="true" />
    </Style>
    <DataTemplate  x:Key="ThumbGridTemplate" >
        <VirtualizingStackPanel x:Name="OuterStackPanel" Height="253" Width="230" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Background="White">
            <VirtualizingStackPanel x:Name="InnerStackPanel" Height="{Binding Height, ElementName=OuterStackPanel}" Width="{Binding Width, ElementName=OuterStackPanel}" >

                <Grid Margin="0,0,0,0" Height="253" Background="#FFCDCDCD">                        
                    <TextBlock TextTrimming="CharacterEllipsis" Text="{Binding FilePath}"  FontFamily="Segoe UI" Foreground="Black"  HorizontalAlignment="Left" TextAlignment="Left" Margin="0" FontSize="12" Height="20" Background="{x:Null}" Width="Auto"   VerticalAlignment="Top"/>                        
                </Grid>
            </VirtualizingStackPanel>
        </VirtualizingStackPanel>           
    </DataTemplate>

</Window.Resources>
<Grid>
    <ListView x:Name="listView"
              VirtualizingStackPanel.IsVirtualizing="True"
              VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                VirtualizingStackPanel.VirtualizationMode="Recycling"
                ScrollViewer.IsDeferredScrollingEnabled="True"
                dz:GridViewSort.AutoSort="True"
                dz:VirtualListLoadingIndicator.IsAttached="False"  ItemTemplate="{StaticResource ThumbGridTemplate}"
             Margin="0,35,0,0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible">

        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <local:VirtualizingWrapPanel IsItemsHost="True" Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>

        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid Background="#FF3E3E3E" Height="30" Margin="0,1,0,1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="{Binding GroupId, StringFormat={}Duplicate \Group {0}}" Foreground="Black" FontSize="14" FontFamily="Segoe UI Semibold" VerticalAlignment="Center" Margin="20,0,0,0"/>

                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
    </ListView>

</Grid>

任何建议都会有所帮助。谢谢你。

4

0 回答 0