Ich bin derzeit verzweifelt von meiner C# WPF GUI-Erfahrung. Im ruhigen neu in WPF und Data-Binding, auch keinen C# Experten im ...Databinding-Leistungsproblem beim Laden riesiger Listen
habe ich versucht, die Demo-Vorlage für grundlegenden MVVM WPF Muster: https://msdn.microsoft.com/en-us/magazine/dd419663.aspx
... und fügte hinzu ~ 2000 Kunden zu prüfen das gui-verhalten auf riesigen datenlisten, weil ich mich in meinem persönlichen projekt mit riesigen listen komplexer daten beschäftigen muss.
Da die Anzeige der Kundenliste in WPF-Data-Binding-Magic erfolgt, ist unklar, wie die GUI-Ladezeit kontrolliert werden kann (bis zu 12 Sek. Mit +2000 Daten).
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, die die Kundenliste enthält:
<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>
Meine Frage ist:
Gibt es eine Möglichkeit i assync kann. lade die Daten, ohne die GUI einzufrieren, während die Listenansicht geladen wird?
Gibt es eine Möglichkeit, den Fortschritt zu verfolgen, oder sogar den Fortschritt der bereits angezeigten Daten zu erhalten, bis alle Elemente korrekt geladen sind?
Plus: Ich struggelaging mit der Datenverbindung zwischen der Methode GetCustomers() und den XAML-Bindings. Wo ist die „richtige Verbindung‘ zwischen diesen beiden Seiten?
Verwenden Sie eine Art und Weise verbindlich, –