Silverlight: Paging für DataGrid oder andere Steuerelemente

by Gregor Biswanger 28. Oktober 2010 07:11

Die Übersichtlichkeit geht verloren wenn zu viele Daten bei einem DataGrid, ListBox oder anderen Controls dargestellt wird. Nicht nur das, es kann zu Performance Problemen kommen. Silverlight rendert wie bei einem Daumenkino (oder auch Film) mehrere Bilder die Sekunde (Frames) um die Oberfläche darstellen zu lassen. Wenn der Inhalt kürzer gehalten wird, kann die Oberfläche selbstverständlich schneller reagieren. Dazu gibt es das altbekannte Paging um Dateninhalte auf mehrere Seiten zu unterteilen.

Ab Silverlight 3 gibt es das DataPager-Steuerelement. Dieses muss explizit an einer PagedCollectionView gebunden werden. Alle anderen Steuerlemente die den späteren Inhalt darstellen sollen, werden auch an die PagedCollectionView gebunden. Der DataPager gibt dann alle weiteren Commands an die PagedCollectionView. Die anderen Steuerelemente erhalten dann automatisch den jeweiligen Inhalt.

Beispiel:

In diesem Beispiel wird gezeigt wie Daten von einem Model ins ViewModel geladen werden. Im ViewModel wird direkt eine Instanz einer PagedCollectionView erzeugt und die Daten vom Model überreicht.

   1:   public class PhoneListViewModel
   2:      {
   3:          public PagedCollectionView PhonePageList { get; set; }
   4:          public ObservableCollection<PersonsItem> Phoneslist { get; set; }
   5:   
   6:          public PhoneListViewModel()
   7:          {
   8:              Phoneslist = new ObservableCollection<PersonsItem>();
   9:   
  10:              // Mock Model from Expression Blend Data-Feature
  11:              Phoneslist = new SampleDataSource().Persons;
  12:   
  13:              PhonePageList = new PagedCollectionView(Phoneslist);
  14:          }
  15:   
  16:          ...
  17:      }

Listing 1 – Source-Code vom ViewModel mit einer PagedCollectionView-Instanz

 

In der View bindet man die gleiche (PagedCollectionView) PhonePageList-Instanz  an das DataGrid und dem DataPager.

 

 

   1:    <sdk:DataGrid x:Name="DgPhonelist" Grid.Row="2" AutoGenerateColumns="False" ItemsSource="{Binding PhonePageList}">
   2:        <sdk:DataGrid.Columns>
   3:                  <sdk:DataGridTemplateColumn CellTemplate="{StaticResource PersonImageTemplate}" />
   4:                  <sdk:DataGridTextColumn Binding="{Binding Firstname}" Header="Vorname"/>
   5:                  <sdk:DataGridTextColumn Binding="{Binding Lastname}" Header="Nachname"/>
   6:                  <sdk:DataGridTextColumn Binding="{Binding Phone}" Header="Telefon"/>
   7:                  <sdk:DataGridTextColumn Binding="{Binding EMail}" Header="E-Mail"/>
   8:        </sdk:DataGrid.Columns>
   9:     </sdk:DataGrid>
  10: <sdk:DataPager HorizontalAlignment="Right" Margin="0,9,8,4" PageSize="20" Grid.Row="1" 
                     d:LayoutOverrides="Height" Width="211" Source="{Binding PhonePageList}"/>

Listing 2 – View (XAML) mit einem DataGrid und DataPager mit einem DataBinding auf PhonePageList

 

Das Ergebnis sieht dann wie folgend aus:

 

image

Abb. 1 – Ein DataGrid mit DataPager-Erweiterung.

 

Die Integration ist sehr einfach und leicht aufgebaut. Dem DataPager stehen zahlreiche anzeige Möglichkeiten, die unter folgendem Link  zu finden sind: DataPager: Stile und Vorlagen



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)