0
我想創建一個有順利滾動的列表視圖(5'000項+)。 我在inet中發現了一個解決方案,即「virtualizationmode = Recycling」可以做到這一點。WPF列列表虛擬化與列
嗯,我完全迷路了,因爲我在我的舊應用中使用了gridview。 現在要虛擬化列表,我不能再使用gridview了,因爲我在另一篇文章中讀到過。
我怎樣才能使它工作?我想使用observalcollection綁定項目,我需要一個Header。
這裏是我的老列表視圖與GridView控件:
<ListView x:Name="ListView_Main" Grid.Column="4" Grid.RowSpan="18" BorderBrush="#FFE87E00" Foreground="#FFE87E00" Background="Transparent" VirtualizingStackPanel.IsVirtualizing="true" VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListView.View>
<GridView x:Name="GridView_ListHeader" AllowsColumnReorder="False">
<!--CheckBox-->
<GridViewColumn x:Name="GridViewColumn_Check" Width="25" Header=""><GridViewColumn.CellTemplate><DataTemplate><StackPanel>
<!---Tag = Index-->
<CheckBox IsChecked="{Binding Checked}" Tag="{Binding Index}"/></StackPanel></DataTemplate></GridViewColumn.CellTemplate>
</GridViewColumn>
<!--CheckImage-->
<GridViewColumn x:Name="GridViewColumn_CheckFake" Width="25" Header=""><GridViewColumn.CellTemplate><DataTemplate><StackPanel>
<Grid Height="17" Width="17" VerticalAlignment="Center" HorizontalAlignment="center">
<Canvas Background="{Binding Color}" Margin="3" Cursor="Hand" Tag="{Binding Index}" MouseLeftButtonDown="Canvas_ListIcon_MouseLeftButtonDown" MouseEnter="Canvas_ListIcon_MouseEnter" MouseLeave="Canvas_ListIcon_MouseLeave"><Canvas.OpacityMask>
<ImageBrush Stretch="UniformToFill" ImageSource="{Binding ImageCheckbox}" RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased"/></Canvas.OpacityMask></Canvas></Grid></StackPanel></DataTemplate></GridViewColumn.CellTemplate>
</GridViewColumn>
<!--Source-->
<GridViewColumn x:Name="GridViewColumn_Icon" Header="" Width="25"><GridViewColumn.CellTemplate><DataTemplate><StackPanel>
<Grid Height="17" Width="17" VerticalAlignment="Center" HorizontalAlignment="center">
<Canvas Background="{Binding Color}" Tag="{Binding Index}" Margin="3" MouseEnter="Canvas_SourceIcon_MouseEnter" MouseLeave="Canvas_SourceIcon_MouseLeave"><Canvas.OpacityMask>
<ImageBrush ImageSource="{Binding ImageSource}" Stretch="UniformToFill" RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased"/></Canvas.OpacityMask></Canvas></Grid></StackPanel></DataTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn>
<!--Pos-->
<GridViewColumn DisplayMemberBinding="{Binding Position}" x:Name="GridViewColumn_Pos" Width="50" Header="Pos"/>
<!--Entry-->
<GridViewColumn DisplayMemberBinding="{Binding Id}" x:Name="GridViewColumn_Entry" Width="200" Header="Eingabe"/>
<!--Sap-->
<GridViewColumn DisplayMemberBinding="{Binding SaperionNr}" x:Name="GridViewColumn_Sap" Width="100" Header="Saperion"/>
<!--Sup-->
<GridViewColumn DisplayMemberBinding="{Binding SupisNr}" x:Name="GridViewColumn_Sup" Width="100" Header="Navision"/>
<!--Path-->
<GridViewColumn DisplayMemberBinding="{Binding Path}" x:Name="GridViewColumn_Path" Width="150" Header="Pfad"/>
<!--Format-->
<GridViewColumn DisplayMemberBinding="{Binding Format}" x:Name="GridViewColumn_Format" Width="50" Header="Format"/>
<!--Page-->
<GridViewColumn DisplayMemberBinding="{Binding Page}" x:Name="GridViewColumn_Page" Width="40" Header="Blatt"/>
<!--Stat-->
<GridViewColumn DisplayMemberBinding="{Binding Status}" x:Name="GridViewColumn_Stat" Width="175" Header="Status"/>
</GridView>
</ListView.View>
</ListView>
預先感謝您!
嗯,我不認爲這是問題,我的listviews高度和寬度是由它的父母定義的,所以我有一個固定的大小。當我打開「ScrollViewer.VerticalScrollBarVisibility」時 - >沒有任何變化。我激活了「ScrollViewer.IsDeferredScrollingEnabled」,使其至少有一點可用。關閉它時,大約需要5秒從元素1滾動到1000. – 2013-03-15 11:34:02
從我對虛擬化的瞭解來看,父級設置的高度和寬度很重要。幽默我,並設置高度,甚至最大高度的東西,你可以看到並再試一次。 – TYY 2013-03-15 12:47:28
謝謝......我實際上有一個從父母給定的固定高度!但你是對的!虛擬化在默認情況下處於開啓狀態,實際上我只是意識到我可以順利滾動,但我不知道爲什麼。我也刪除了「ScrollViewer.IsDeferredScrollingEnabled」,但它正常。我的電腦一定沒有足夠的內存或其他東西...謝謝 – 2013-03-15 13:17:31