Иногда у вас может быть только ~ 30 видимых строк для загрузки, и если эти строки + какие-либо столбцы загружать дорого из-за их количества и сложности каждой ячейки (это шаблон или количество элементов wpf), ни один из вышеупомянутые комментарии действительно имеют значение. Каждая строка займет сладкое время для загрузки!
Что помогает, так это пошаговая или ленивая загрузка каждой строки в пользовательском интерфейсе, так что пользователь видит, что пользовательский интерфейс что-то делает, а не просто останавливается на ~ 10 + секунд.
Для простоты предположим, что datagrid ItemSource = "{Binding Rows}" и Rows - это IEnumerable, где Row - это какой-то созданный вами класс: добавьте свойство IsVisible в Row (не забудьте поднять свойство измененное, конечно)
Вы могли бы сделать что-то вроде этого:
private void OnFirstTimeLoad()
{
Task.Factory.StartNew(() =>
{
foreach (var row in ViewModel.Rows)
{
/*this is all you really need,
note: since you're on the background thread, make sure IsVisible executes on the UI thread, my utils method does just that*/
myUtils.ExecuteOnUiThread(() => row.IsVisible = true);
/*optional tweak:
this just forces Ui to refresh so each row repaint staggers nicely*/
Application.Current.Dispatcher
.Invoke(DispatcherPriority.Background, (SendOrPostCallback) delegate { }, null);
}
});
}
о, и не забудьте запустить в XAML:
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Visibility" Value="{Binding Path=IsVisible, Converter={StaticResource BoolToVisibility}}"/>
........