В настоящее время я отчаиваюсь от моего опыта работы с графическим интерфейсом C# WPF. Im тихий новичок в WPF и привязки данных, а также не им нет C# эксперта ...Проблема с эффективностью привязки данных при загрузке огромных списков
Я попробовал демо-шаблон для основного MVVM WPF Шаблон: https://msdn.microsoft.com/en-us/magazine/dd419663.aspx
... и добавил ~ 2000 клиента проверить поведение gui в огромных списках данных, потому что мне приходится иметь дело с огромными списками сложных данных в моем личном проекте.
Поскольку отображение списка клиентов происходит в WPF-Data-Binding-Magic, неуверенность в том, как сохранить контроль времени загрузки графического интерфейса (до 12 секунд с данными +2000).
CustomerRepository:
readonly List<Customer> _customers;
/// <summary>
/// Returns a shallow-copied list of all customers in the repository.
/// </summary>
public List<Customer> GetCustomers()
{
return new List<Customer>(_customers);
}
AllCustomerView.xaml/ListView, который содержит список клиентов:
<ListView
AlternationCount="2"
DataContext="{StaticResource CustomerGroups}"
ItemContainerStyle="{StaticResource CustomerItemStyle}"
ItemsSource="{Binding}"
>
<ListView.GroupStyle>
<StaticResourceExtension
ResourceKey="CustomerGroupStyle"
/>
</ListView.GroupStyle>
<ListView.View>
<GridView>
<GridViewColumn
Header="Name"
DisplayMemberBinding="{Binding Path=DisplayName}"
/>
<GridViewColumn
Header="E-mail"
DisplayMemberBinding="{Binding Path=Email}"
/>
<GridViewColumn Header="Total Sales">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ContentPresenter
Content="{Binding Path=TotalSales}"
ContentStringFormat="c"
HorizontalAlignment="Right"
/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<UserControl.Resources>
<CollectionViewSource
x:Key="CustomerGroups"
Source="{Binding Path=AllCustomers}"
>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="IsCompany" />
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<!--
Sort descending by IsCompany so that the 'True' values appear first,
which means that companies will always be listed before people.
-->
<scm:SortDescription PropertyName="IsCompany" Direction="Descending" />
<scm:SortDescription PropertyName="DisplayName" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
Мой вопрос:
Есть ли способ я могу assync. загружать данные, не замораживая gui во время загрузки списка?
Есть ли способ отслеживать прогресс или даже обрабатывать уже отображаемые данные до тех пор, пока все предметы не будут загружены правильно?
Плюс: Я борется с привязкой данных между методом GetCustomers() и XAML-Bindings. Где «реальная связь» между этими двумя сторонами?
Используйте один из способов связывания, –