wpf i bindowanie

0

Cześć, używam bindowania do wypełnienia pół. Posiadam kolekcję w której jest kilkanaście tysięcy rekordów, gdy wypełniam dane trwa to około 2 minut i zajmuje dużo pamięci. Da się to jakoś obejść, poniżej kawałek kodu

      <DataGridTemplateColumn Width="256" >
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch">
                                        <StackPanel.ToolTip>
                                            <TextBlock Text="{Binding Path='StepsToReproduce'}" MaxWidth="350" FontSize="14" TextWrapping="Wrap" />
                                        </StackPanel.ToolTip> 
1

uzyj paginacji
http://stackoverflow.com/questions/784726/how-can-i-paginate-a-wpf-datagrid

I laduj dane w osobnym watku to wtedy UI nie bedzie zamrozone. Jak bedziesz pobieral po 1000 rekordow to watpie by ktos przejrzal te 1000 rekordow zanim zaladuje sie kolejne 1000

ewentualnie do tego mozesz jeszcze uzyc lazy loading i ladowac te kolejne 1000 tylko gdy uzytkownik zobaczy powiedzmy 75% wszystkich danych

1

Dodaj jeszcze asynchroniczne bindowanie danych, bo i ile przy włączonej domyślnie wirtualizacji kontrolki DataGrid ładuje się tylko to co widać na ekranie i GUI szybko stanie się responsywne o tyle kiedy ją wyłączysz to będziesz miał problem przy tak dużej liczbie rekordów.

Jak to zrobić? Po prostu przy bindowaniu ItemsSource dla gridu dodaj IsAsych=true np:

<DataGrid ItemsSource="{Binding Collection, IsAsync=True}" />

Bardzo przyspiesza wypełnianie gridu i pozwala odmrozić GUI, nazwijmy to. :)
Dobrze jest stosować async oraz to co napisał @fasadin z wątkami i paginacją.

1 użytkowników online, w tym zalogowanych: 0, gości: 1