2013-03-15 3 views
0

Я пытаюсь создать listview (5'000 элементов +), который имеет плавную прокрутку. Я нашел решение в инет, что «virtualizationmode = Recycling» может сделать трюк.Виртуализация виртуализации WPF со столбцами

Ну, я полностью потерялся, так как я использовал сетку в моем старом приложении. Теперь, чтобы виртуализировать список, я больше не могу использовать gridview, поскольку я читаю в другом сообщении.

Как я могу заставить это работать? Я хочу связать элементы с помощью коллекции observalcollection, и мне нужен заголовок.

Вот мой старый ListView с 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> 

Спасибо заранее !!!

ответ

1

Listviews должен по умолчанию включать виртуализацию. Однако есть случай, который сводит на нет их эффект. Я бы установил maxheight и убедитесь, что установлен ScrollViewer.VerticalScrollBarVisibility = "Visible".

+0

Хмм, я не думаю, что это проблема, мои списки высоты и ширины определяются его родителем, поэтому у меня фиксированный размер. Когда я включаю «ScrollViewer.VerticalScrollBarVisibility» в -> Ничего не меняется. Я активировал «ScrollViewer.IsDeferredScrollingEnabled», чтобы сделать его хотя бы немного пригодным для использования. При отключении его требуется прокрутка от элемента 1 до 1000. –

+0

Ну, из того, что я знаю о виртуализации, что имеет значение родительский, как высота и ширина. Юмор меня и установите высоту или даже максимальную высоту на что-то ощутимое, что вы можете увидеть и попробовать еще раз. – TYY

+0

Спасибо ... У меня есть фиксированная высота, указанная от родителя! Но ты был прав! Виртуализация включена по умолчанию, и на самом деле я просто понял, что могу прокручивать плавно, но я не знаю почему. Я также удалил «ScrollViewer.IsDeferredScrollingEnabled», но он просто работает. У моего компьютера, должно быть, не хватило бара или что-то ... Спасибо –

Смежные вопросы