虚拟包装面板中的分组问题

时间:2018-09-08 05:12:15

标签: c# wpf wrappanel

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

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

我尝试过,但是开始出现异常

  

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

MainWindow.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);    

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

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

0 个答案:

没有答案