WinRT Listview customizen

Wie bei WPF und Silverlight üblich, kann man über die XAML  Templates das Layout des ListView Controls komplett verändern. Folgendes XAML Beispiel verändert die Ausrichtung der Liste auf Horizontal,

<ListView x:Name="Listbox1"  HorizontalAlignment="Left"    VerticalAlignment="Top" Grid.Row="2"  >
      <ListView.ItemsPanel>
          <ItemsPanelTemplate>
              <StackPanel Orientation="Horizontal"/>
                    
          </ItemsPanelTemplate>
      </ListView.ItemsPanel>
 </ListView>    

Wenn man ca 4000 items in der Liste hat braucht meine Anwendung plötzlich 366 MB Arbeitsspeicher und ewig zum aufbauen. Der Grund ist seit langem bekannt und hat nichts mit WinRT oder C#/VB.net zu tun. In diesem Sample werden schlicht 4000 UI Controls erzeugt, auch für den nicht sichtbaren Bereich. Das das nicht gut sein kann, versteht sich von selbst. Das Standard Listview Control braucht mit geladenen Daten nur 19,5 MB (ohne Daten 12 MB). Das liegt daran, das intern das Virtualisierte Stackpanel angewendet wird.

 <ListView x:Name="Listbox1"  HorizontalAlignment="Left"    VerticalAlignment="Top" Grid.Row="2"  >
      <ListView.ItemsPanel>
           <ItemsPanelTemplate>
              <VirtualizingStackPanel Orientation="Horizontal"/>
                  
          </ItemsPanelTemplate>
     </ListView.ItemsPanel>
 </ListView>  

 

Wenn man die Einträge mit Umbruch erzeugen möchte, kennt man aus XAML vermutlich das WrapPanel. Das gibt es so nicht, dafür das VariableSizedWrapGrid. Seicherverbrauch ähnlich wie Stackpanel, also Vorsicht mit großen Datenmengen.

    <VariableSizedWrapGrid Orientation="Horizontal"></VariableSizedWrapGrid>

 

Das Ergebnis mit der Namensliste.

image

Wenn man letzteres vor hat sollte man besser gleich ein Gridview verwenden.

Pingbacks and trackbacks (1)+

Kommentare sind geschlossen